下图为CH32V305/307和CH32F205/207时钟树框图,在此,以CH32V307VCT6芯片,外置25MHz晶振为例,简述图中PREDIV与PLLMUL的配置方法,最终实现144MHz系统主频。

外置晶振信号可直接输入PREDIV1与PLLMUL,也可先通过PREDIV2与PLL2MUL后,再输入PREDIV1与PLLMUL。当外置晶振频率为25MHz时,可先使用PREDIV2进行5分频,然后使用PLL2MUL进行8倍频,再使用PREDIV1进行5分频,最后使用PLLMUL进行18倍频,即SYSCLK(144MHz)=25/5(PREDIV2/5)*8(PLL2MUL*8)/5(PREDIV1/5)*18(PLLMUL*18)。

时钟的修改涉及两个文件,分别是system_ch32v30x.c与ch32v30x.h,首先修改头文件中HSE_VALUE宏定义的值为外置晶振频率。

1. #define HSE_VALUE ((uint32_t)25000000) /* Value of the External oscillator in Hz */

然后在system_ch32v30x.c文件中找到SetSysClockTo144_HSE函数,第一步,在配置RCC_CFGR0前,先配置PREDIV2为5分频与PLL2MUL为8倍频,使能PLL2MUL并等待其就绪;第二步,在使能PLLMUL前,配置PREDIV1的时钟源为PLL2MUL且为5分频。

1. /* PLL configuration: PLLCLK = HSE * 18 = 144 MHz */

2. RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL));

3.

4. RCC_PREDIV2Config(RCC_PREDIV2_Div5);

5. RCC_PLL2Config(RCC_PLL2Mul_8);

6. RCC_PLL2Cmd(ENABLE);

7. while( (RCC->CTLR & (1<<27)) == 0 )

8. {

9. }

10.

11. #ifdef CH32V30x_D8

12. RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE | RCC_PLLMULL18);

13. #else

14. RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE | RCC_PLLMULL18_EXTEN);

15. RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);

16. #endif

17.

18. /* Enable PLL */

19. RCC->CTLR |= RCC_PLLON;

20. /* Wait till PLL is ready */

21. while((RCC->CTLR & RCC_PLLRDY) == 0)

22. {

23. }

除此之外,在使用USB HS接口时,还应对USBHS_RCC_Init函数做进一步的调整,首先配置USBHS时钟为5分频,然后设置USBHSPLL参考时钟为5MHz。

1. RCC_USBHSConfig( RCC_USBPLL_Div5 );

2. RCC_USBHSPLLCKREFCLKConfig( RCC_USBHSPLLCKREFCLK_5M );

其他系列芯片不再一一赘述,使用时应首先查阅时钟树框图,参考应用手册中具体的配置要求,并结合上述方法进行操作。最终还可以通过MCO将SYSCLK进行输出,使用示波器进行简单的测量。

PREDIV与PLLMUL配置应用笔记的更多相关文章

  1. SVN版本库(访问权限)配置实例笔记

    http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...

  2. nginx 配置rewrite 笔记

    nginx 配置rewrite笔记: 通过下面的示例来说明一下,1. 先说说location : location 表示匹配传入的url地址,其中配置符有多种,各种情况的意义不一样: location ...

  3. Chapter 2. OpenSSL的安装和配置学习笔记

    Chapter 2. OpenSSL的安装和配置学习笔记 2.1 在linux上面安装OpenSSL我还是做点No paper事情比较在行,正好和老师的课程接轨一下.以前尝试过在Windows上面安装 ...

  4. centos6 安装配置ss笔记

    2018-05-17 centos6 安装配置ss笔记 操作环境:Centos 6 x86_64 bbr 服务器地址:美国 1.准备VPS 在https://www.bwh1.net可购买,购买时已默 ...

  5. redis 安装配置学习笔记

    redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://downl ...

  6. Celery配置实践笔记

    说点什么: 整理下工作中配置celery的一些实践,写在这里,一方面是备忘,另外一方面是整理成文档给其他同事使用. 演示用的项目,同时也发布在Github上: https://github.com/b ...

  7. FtpServer穿透内网访问配置踩笔记

    FtpServer穿透内网访问配置踩笔记 引言 FtpServer是服务器文件远程管理常用方式. 以前在局域网配置Ftp服务器以及使用公网上的Ftp服务均未碰到问题,固未对Ftp传输进行深入了解. 然 ...

  8. SpringBoot多重属性文件配置方案笔记

    SpringBoot多重属性文件配置方案笔记 需要重写PropertyPlaceholderConfigurer 同时要忽略DataSourceAutoConfiguration @SpringBoo ...

  9. Ubuntu构建Docker私有仓库(Repository) 配置过程笔记

    一.准备: 1.服务器(或者虚拟机2台,我的服务环境[  阿里云服务器-Ubuntu 1804 +百度云-Ubuntu 1604]) 2.有效镜像(我这里以上一篇随笔镜像作为有效镜像https://w ...

  10. Elasticsearch的配置学习笔记

    文/朱季谦 Elasticsearch是一个基于Lucene的搜索服务器.它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的. ...

随机推荐

  1. 在void 中使用return的意思

    在定义的void函数里如果想要提前终止函数 格式为 return; 如果 在有返回值的函数中 格式为: return+值(0 -1 ......) 但如果在void 函数中写return 0 ; 则会 ...

  2. Python全栈开发工程师 day57 jQuery

    二.jQuery样式操作标签样式操作<!DOCTYPE html><html lang="en"><head> <meta charset ...

  3. Java:Should I use a `HashSet` or a `TreeSet` for a very large dataset?

    这是StackOverflow上一个有意思的提问,记录一下. 原地址在这 翻译: 对于大型数据集,应该使用"哈希集"还是"树集"? (因为HashTable有着 ...

  4. 18年CCCC赛后总结

    C4赛后总结: 我正式入坑以来,大约5个月,这也是我第一次出去参与这样正式的比赛,其实比赛结果并不尽人意,但有很多还是需要记录下来的,通过这次比赛的确获得了很多的比赛经验: 一赛前: 其实赛前的状态, ...

  5. 把ChatGPT调教成机器学习专家,以逻辑回归模型的学习为例

    大家好我是章北海mlpy 看到一个蛮有意思的项目,可以把ChatGPT调教成导师 https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor 可以根据你选择的学习 ...

  6. List 集合手动分页的方法总结

    前言 在工作中难免会遇到,将组装的集合数据进行分页处理,现在我将自己手动分页的三种方法进行总结,有不对的地方敬请大家批评指正! 一.数据准备 // 当前页 int pageIndex = 1; // ...

  7. union()并集intersection()交集difference()差集

    union并集,即:合并 intersection()交集 difference()差集 qs1=Course.objects.filter(price__get=240) qs2=Course.ob ...

  8. distinct()去重

    distinct()去重 Student.objects.all().distinct()

  9. Vue2 去除定时器之常用三种方式及特殊方式

    一般情况去除定时器的常用的三种方式方法:创建一下三种钩子函数,一般有其中一个就足以实现清除定时器的效果beforeDestroy(){ beforeDestroy(){ // 离开当前路由前的操作 c ...

  10. Hugging News #0519: 我们把 HuggingChat 开源了

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...