首页 > 其他分享 >PREDIV与PLLMUL配置应用笔记

PREDIV与PLLMUL配置应用笔记

时间:2023-07-20 09:56:00浏览次数:52  
标签:分频 PREDIV1 PLLMUL HSE 笔记 PREDIV PLL2MUL RCC

下图为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进行输出,使用示波器进行简单的测量。

标签:分频,PREDIV1,PLLMUL,HSE,笔记,PREDIV,PLL2MUL,RCC
From: https://www.cnblogs.com/wchmcu/p/17567479.html

相关文章

  • 数据结构练习笔记——删除单链表中某区间的数
    删除单链表中某区间的数【问题描述】已知某带头结点的单链表中存放着若干整数,请删除该单链表中元素在[x,y]之间的所有结点,要求算法的时间复杂度为O(n),空间复杂度为O(1)。【输入形式】​ 第一行:单链表中元素个数m​ 第二行:单链表中的m个整数​ 第三行:要删除的元素值所在区......
  • Kubernetes亲和性学习笔记
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本文是欣宸在学习Kubernetes调度器的过程中,对亲和性相关知识点的整理和总结,这是一篇笔记性质的博客kubernetes默认调度器的调度过程:调度过程如下:预选(Pred......
  • git学习笔记——pull时与本地修改有冲突无法拉取
    在本地仓库的项目中修改代码后,若团队其他人也修改了代码,此时pull同步极有可能冲突失败强制使用远程仓库的修改覆盖本地修改#首先先远程下载最新的版本,但不合并先gitfetch--all#然后用刚刚下载的版本内容覆盖本地的内容gitreset--hardorigin/master......
  • JavaScript学习笔记01(包含ES6语法)
    Js简介什么是Js?Js最初被创建的目的是“使网页更生动”。Js写出来的程序被称为脚本,Js是一门脚本语言。被直接写在网页的HTML中,在页面加载的时候自动执行脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JINcompiler)Js不仅可以在浏览器中执行,也可以......
  • 「学习笔记」自动机家族
    OI中所说的「自动机」一般都指「确定有限状态自动机」。一个确定有限状态自动机(DFA)由以下五部分构成:字符集(\(\Sigma\)),该自动机只能输入这些字符。状态集合(\(Q\))。如果把一个DFA看成一张有向图,那么DFA中的状态就相当于图上的顶点。起始状态(\(start\)),\(start\inQ\),是一......
  • K210笔记
    MaixPy文档K210学习笔记@嘉楠官网todo......
  • 「学习笔记」FHQ-treap
    FHQ-treap,即无旋treap,又称分裂合并treap,支持维护序列,可持久化等特性。FHQ-treap有两个核心操作,分裂与合并。通过这两个操作,在很多情况下可以比旋转treap等方便的实现一些操作。FHQ-treap与其他的平衡树相比,他最明显的优点是:它好写!!!,想象一下,在考场上,你用较短的时间写出FH......
  • python笔记:第十一章正则表达式
    1.模块re以一定规则,快速检索文本,或是实现一些替换操作默认下,区分大小写2.常见的匹配字符表字符描述\d代表任意数字,就是阿拉伯数字0-9这些\D代表非数字的字符。与\d完全相反\w代表字母,数字,下划线。也就是a-z、A-Z、0-9、_\W跟\w相反,代表不是字母......
  • StarRocks Segment源码阅读笔记--Page的组成
    Page由4部分组成PageBody,PageFooter,FooterSize(4),CheckSum(4)PageBody是由page类型决定的,可能是压缩的。PageFooter是经过序列化的PageFooterPB。它包含page_type、未压缩的body大小和其他通用的元数据。如果PageBody的大小和未压缩的body大小一致,则表示这个page是未压缩的。F......
  • 特征平台笔记
    AI从2012年开始快速发展,在人脸识别、广告、个性化推荐等领域大规模商用后,陆续出现了一些通用的平台来加速模型训练和模型部署流程,例如:AWSSageMaker :通过完全托管的基础设施、工具和工作流程为任何用例构建、训练和部署机器学习(ML)模型Google VertexAI :使用全代管式机......