发新帖我要提问
12
返回列表
打印
[STM32WB]

STM32定时器中断配置步骤_影子寄存器_时钟_时钟树_固件库

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
几个关键时钟:
① SYSCLK 系统时钟,STM32F407最高是168M,来自于 PLL锁相环电路提供的时钟信号

② PLLCLK 经过锁相环电路倍频/分频后得到的 时钟信号,通常是选择 HSE作为锁相环的输入时钟 =》 外部晶振时钟比较稳定
P L L C L K = H S E ÷ M × N ÷ P PLLCLK = HSE ÷ M × N ÷ P
PLLCLK=HSE÷M×N÷P

③ AHB总线时钟:由 SYSCLK系统时钟经过 AHB_PRESC预分频器分频后得到,主要提供给内核、存储器、DMA、系统时钟定时器等使用

④ APBx总线时钟:APB外设时钟总线,用来给外设控制器提供时钟信号,又可以分为 低速外设时钟总线APB1(最高42MHz) 和 高速外设时钟总线 APB2(最高84MHz)

使用特权

评论回复
22
纠结的那些年|  楼主 | 2024-7-31 13:15 | 只看该作者
注意:对于APBx总线上的外设 和 定时器来讲,虽然 APBx总线上的时钟是相同的,但作用在外设和定时器时频率会不相同!

使用特权

评论回复
23
纠结的那些年|  楼主 | 2024-7-31 13:15 | 只看该作者
对于外设来说,APBx提供的时钟频率就是 总线上的 频率。

对于定时器来说,APBx提供的时钟频率还与 APBx_PRESC预分频器的系数有关。



APBx_外设时钟 = APBx_CLK

APBx_定时器时钟 = APBx_CLK*1 ,当APBx_PRESC == 1 时

APBx_定时器时钟 = APBx_CLK*2 ,当APBx_PRESC != 1 时

关于 APBx_PRESC 系数的配置 见下面第4部分

使用特权

评论回复
24
纠结的那些年|  楼主 | 2024-7-31 13:15 | 只看该作者
比如:

TIM9和SYSCFG都是位于 APB2总线(频率84M)上,则 SYSCFG外设得到的时钟频率为84MHz,

而TIM9定时器得到的时钟频率是 84M*2=168M

4. 关于时钟树中参数说明
在固件库system_stm32xx.c文件的 SetSysClock() 函数中为我们默认配置了时钟树中的一些参数

使用特权

评论回复
25
纠结的那些年|  楼主 | 2024-7-31 13:16 | 只看该作者

使用特权

评论回复
26
纠结的那些年|  楼主 | 2024-7-31 13:16 | 只看该作者

使用特权

评论回复
27
纠结的那些年|  楼主 | 2024-7-31 13:16 | 只看该作者
①处:HCLK = SYSCLK,参考图二可知APB_PRESC的系数为1

②处:PCLK2 = HCLK/2 =》PCLK2 = SYSCLK/2,PCLK2即APB2的外设时钟。

​ 参考图二可知,APB2_PRESC的系数为2,故

​ APB2外设时钟为 SYSCLK/2 = 168M / 2 = 84M

​ APB2定时器时钟为 (SYSCLK/2) * 2 = SYSCLK = 168M

③处:同理可得

​ APB1外设时钟为 SYSCLK/4 = 168M / 4 = 42M

​ APB1定时器时钟为 (SYSCLK/4) * 2 = 84M

使用特权

评论回复
28
纠结的那些年|  楼主 | 2024-7-31 13:16 | 只看该作者
使用定时器前的必须操作—修改固件库时钟配置
由于固件库代码在出厂时无法预知用户的外部晶振会接多大,因此只是给了个默认值,用户需要根据自己的硬件电路,来修改时钟配置。

主要需要修改的值有4个:

HSE_VALUE : GEC-M4采用8M

PLL_M、PLL_N、PLL_P 这三个要确保PLLCLK能够达到最大值168M

使用特权

评论回复
29
纠结的那些年|  楼主 | 2024-7-31 13:16 | 只看该作者
注意
上述内容,必须根据实物电路上的晶振大小进行修改,否则 后续定时器的定时时间 、串口的波特率、SPI的通信速率、实时操作系统的系统时钟,都会是错误的!!!

使用特权

评论回复
30
鹿鼎计| | 2024-8-1 23:13 | 只看该作者
STM32定时器中断配置步骤包括:配置时钟树,开启定时器时钟;设置定时器参数,开启中断;配置影子寄存器实现定时器值自动重装;固件库用于简化操作。

使用特权

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

本版积分规则