打印
[技术手册]

时钟树

[复制链接]
108|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoyaodz|  楼主 | 2024-8-24 03:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

单片机的启动文件会使用单片机内部的RC振荡器作为单片机的启动时钟,并且该时钟频率被设置为48MHz。但讲解有疏漏,根据编程手册的描述,该48MHz仅为HSI频率,而非输送到时钟总线上的频率,在进入时钟总线之前,该时钟会被分频(也就是降低频率),在不进行任何配置的情况下,这个48M的信号会被6分频。



这个图包含很多信息,但是图中的彩色字信息并非全部来自此图,更多的信息需要结合代码和寄存器描述来获得:

1.HSI被配置为48M是通过启动文件中的SystemInit函数得知的。

2.系统选择HSI作为启动时钟是通过编程手册“时钟与复位”一章得知的。

3.HSI之后的预分频器被设置为6分频,是通过查看指示该分频器的寄存器得知的。

下面以信息3为例,讲解如何查看此图中的相关寄存器:

  • 在经过SYSCTRL_CR0.SYSCLK寄存器选择之后,系统时钟SysClk会在经过分频后送入内核与各个外设,这一信息流程图与粉色箭头已经清晰展示。
  • 在手写箭头指向的方框中,有1、…、16的字样,表示该预分频器可以进行这些倍数的分频。所谓分频比如48M,6分频,其分频结果就是48M/6 = 8M,2分频就是24M,简单的除法。
  • 方框下方是该分频器对应的控制寄存器,寄存器的名字并不一定完全叫这个,但是这个名字可以很容易就被理解为预分频器控制相关的寄存器,该寄存器名字拆解版本是:SYS(系统)CTRL(控制)HSI.DIV(分频),这套命名系统是通用的,即使使用的是别的单片机,也可以根据这套命名规则快速确认寄存器的功能。
  • 通过查看编程手册时钟与复位章节的寄存器描述,此寄存器DIV位的值默认为6。而HSI频率的设置则是该寄存[10:0]位的TRIM位决定的。


只需要沿着紫色箭头的方向配置相关的寄存器,单片机就能够正常启动,但这一步并不需要开发者亲自去做,芯片厂家提供的启动文件和库可以自动完成这一步。但不论怎么说RC振荡器的精度有限,且8M的速度放在48MHz主频的内核上也确实不够看,因此大部分时候,都需要使用外部晶振提供的时钟,通过锁相环倍频之后达到48M,最后通过时钟线送入内核和外设。

下面讲解怎么配置才能得到48MHz的高精度高速时钟信号:


首先,电路板上需要有一个在范围内的晶体,晶体的两个引脚需要在外围电路的配合下连接到单片机的晶体输入引脚,同时IO需要工作在正确的工作模式。


硬件部分准备完成了,接下来就是配置HSE和PLL相关的寄存器了。下面是相关的配置代码:

  • 首先需要打开HSE功能,允许单片机接收HSE提供的震荡信号。
  • 然后配置PLL的分频系数,这将决定锁相环的输出频率,此处设置为1分频,也就是不分频。
  • 使能PLL功能,并告知用到的时钟源、时钟频率、倍频系数,这对应三个入口参数。
  • 将flash的等待周期设置为3个时钟周期,部分单片机需要进行这一步操作,原因会在后面细说。
  • 进行时钟切换,按照注释完成准备工作之后即可切换。

先查看HSE使能函数:


仅展示主体部分,函数注释未列出,但CW32的时钟配置库函数注释相对来说很详细,推荐配置都写在函数注释里面,不懂得寄存器配置的小伙伴可以直接根据推荐进行配置,如果有更深入的需求,直接查看芯片手册对应的寄存器描述即可。

后续的参数配置直接根据注释进行推荐配置即可,在PLL与HSE相关的寄存器配置完成之后,48M的时钟信号就已经产生了,只不过系统的时钟源还不是这个(记得那个梯形的选择器吗?),下一步就是切换时钟源,让系统工作在48M的频率下。


使用特权

评论回复
沙发
jf101| | 2024-9-17 21:16 | 只看该作者
只需要沿着起东需求配置相关的寄存器,单片机就能够正常启动

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

4693

帖子

2

粉丝