打印
[其他ST产品]

搭建机器人电控系统——MCU基石——STM32时钟配置详解

[复制链接]
楼主: 自动化陈稳
手机看帖
扫描二维码
随时随地手机跟帖
21
自动化陈稳|  楼主 | 2023-10-18 16:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
自动化陈稳|  楼主 | 2023-10-18 16:36 | 只看该作者
由说明备注知道,这个文件有两个函数:

①SystemInit():设置系统时钟函数,包括:

时钟源是哪个?
PLL锁相环中的系数是多少?
AHB/APB预分频器的分频是多少?
(看,是不是解决了之前参数的问题)

使用特权

评论回复
23
自动化陈稳|  楼主 | 2023-10-18 16:38 | 只看该作者
②SystemCoreClockUpdate():用于更新变量SystemCoreClock ,这个变量的赋值是HCLK或者说主频,这个变量被用于去实现Cortex内核自带的那个定时器,用于程序延时。

使用特权

评论回复
24
自动化陈稳|  楼主 | 2023-10-18 16:38 | 只看该作者
整个文件的工作过程:

单片机上电复位/或按键复位后,程序先执行startup_stm32f4xx.s启动函数,启动函数中默认选择HSI(16MHZ)作为时钟源。system_stm32f4xx.c在startup_stm32f4xx.s中被调用,执行其中的SystemInit()函数,而在这个函数中除了复位一些寄存器的初始位置外,经过了一个叫做SetSysClock()的函数:

使用特权

评论回复
25
自动化陈稳|  楼主 | 2023-10-18 16:38 | 只看该作者
这个函数上方的关键注释是:Configure the System clock source(初始化时钟源)

使用特权

评论回复
26
自动化陈稳|  楼主 | 2023-10-18 16:39 | 只看该作者
这个函数是这样的:

使用特权

评论回复
27
自动化陈稳|  楼主 | 2023-10-18 16:39 | 只看该作者
这个函数的说明是:PLL (clocked by HSE) used as System clock source,即将HSE作为时钟源经过PLL锁相环得到系统时钟。

使用特权

评论回复
28
自动化陈稳|  楼主 | 2023-10-18 16:39 | 只看该作者
而我们在时钟树里知道,系统时钟有三条路:

使用特权

评论回复
29
自动化陈稳|  楼主 | 2023-10-18 16:39 | 只看该作者
HSI(16MHZ)
HSE(4—25MHZ)
PLLCLK(HSE经过PLL锁相环得到)

使用特权

评论回复
30
自动化陈稳|  楼主 | 2023-10-18 16:39 | 只看该作者
由此我们得出结论:在MCU的启动过程中,先默认把HSI(16MHZ)作为时钟源启动,然后再经过SystemInit()中的SetSysClock()函数,将HSE作为时钟源经过PLL锁相环后的时钟作为真正的系统时钟!

使用特权

评论回复
31
自动化陈稳|  楼主 | 2023-10-18 16:41 | 只看该作者
②参数二:分频系数是多少?

现在我们知道了单片机选择的时钟的具体路线,现在关键就是如何确定路线上的分频系数,这些分频系数包括:分频系数M,倍频系数N,分频系数P,如下图。

使用特权

评论回复
32
自动化陈稳|  楼主 | 2023-10-18 16:41 | 只看该作者
同样在system_stm32f4xx.c文件中,有对这几个系数变量的初始化:

使用特权

评论回复
33
自动化陈稳|  楼主 | 2023-10-18 16:41 | 只看该作者
根据公式计算:系统时钟SYSCLK=8MHZ*N/M/P=168MHZ,即SYSCLK的最大频率:

使用特权

评论回复
34
自动化陈稳|  楼主 | 2023-10-18 16:42 | 只看该作者
以上,解决了SYSCLK的问题。

AHB,APB的分频系数是多少?
其实在SystemInit()中的SetSysClock()函数中已经做了初始化:

使用特权

评论回复
35
自动化陈稳|  楼主 | 2023-10-18 16:42 | 只看该作者
第一句话告诉我们:系统默认运行出来的系统时钟频率为168MHZ,这也应证了我们之前的理论。
第二句话告诉我们:HCLK=SYSCLK/1,即AHB时钟线频率=SYSCLK=168MHZ。
第三句话告诉我们:PCLK2=HCLK/2,即APB2时钟线频率=HCLK/2=84MHZ。
第四句话告诉我们:PCLK1=HCLK/4,即APB1时钟线频率=HCLK/4=42MHZ。

使用特权

评论回复
36
自动化陈稳|  楼主 | 2023-10-18 16:42 | 只看该作者
以上是分频系数的选择,这是初始化默认的分频,当然你可以改成其他分频。

其实在system_stm32f4xx.c开头的表格中已经告诉过我们所有参数的默认值:

使用特权

评论回复
37
自动化陈稳|  楼主 | 2023-10-18 16:43 | 只看该作者
但是当你需要移植到另外一个型号的板子的时候,你需要知道怎么改才能移植,如果427和407的主频是不一样的,你应该怎么改?

使用特权

评论回复
38
自动化陈稳|  楼主 | 2023-10-18 16:43 | 只看该作者
③时钟线到了哪?——stm32f4xx_rcc.c文件
经过以上的分析,我们得出:

AHB=168MHZ
APB1=42MHZ
APB2=84MHZ

使用特权

评论回复
39
自动化陈稳|  楼主 | 2023-10-18 16:43 | 只看该作者
在stm32f4xx_rcc.c文件中,对不同时钟线上所挂载的设备进行了初始化,通过该文件可以知道:

使用特权

评论回复
40
自动化陈稳|  楼主 | 2023-10-18 16:43 | 只看该作者
挂载在AHB1上的设备:

使用特权

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

本版积分规则