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

[复制链接]
4062|29
 楼主| 纠结的那些年 发表于 2024-7-31 13:15 | 显示全部楼层
几个关键时钟: 6972166a9c86462ab8.png
① 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)
 楼主| 纠结的那些年 发表于 2024-7-31 13:15 | 显示全部楼层
注意:对于APBx总线上的外设 和 定时器来讲,虽然 APBx总线上的时钟是相同的,但作用在外设和定时器时频率会不相同!
 楼主| 纠结的那些年 发表于 2024-7-31 13:15 | 显示全部楼层
对于外设来说,APBx提供的时钟频率就是 总线上的 频率。

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

4637666a9c87ddfdbd.png

APBx_外设时钟 = APBx_CLK

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

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

关于 APBx_PRESC 系数的配置 见下面第4部分
 楼主| 纠结的那些年 发表于 2024-7-31 13:15 | 显示全部楼层
比如:

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

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

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

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

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

HSE_VALUE : GEC-M4采用8M

PLL_M、PLL_N、PLL_P 这三个要确保PLLCLK能够达到最大值168M
1791466a9c8b706708.png
 楼主| 纠结的那些年 发表于 2024-7-31 13:16 | 显示全部楼层
注意
上述内容,必须根据实物电路上的晶振大小进行修改,否则 后续定时器的定时时间 、串口的波特率、SPI的通信速率、实时操作系统的系统时钟,都会是错误的!!!
鹿鼎计 发表于 2024-8-1 23:13 | 显示全部楼层
STM32定时器中断配置步骤包括:配置时钟树,开启定时器时钟;设置定时器参数,开启中断;配置影子寄存器实现定时器值自动重装;固件库用于简化操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部