1. STM32时钟系统
(1)Clock tree
可以在官方手册(Stm32x-series-Reference-manual)的clock tree中可以对相应MCU的时钟系统有个大致了解。
也可以从中了解到STM32哪些外设挂在哪一条总线上,然后根据Cube中配置的时钟频率和各种分频就可以得到各总线的时钟频率,注意挂在这些总线上的外设还需要在配置时经过分频得到外设的时钟频率。
(2)STM32总线与时钟配置
假如STM32时钟源为HSE高速外部晶振,HSE一般为8MHz,经过x分频和y倍频后得到系统时钟,即PLLCLK = (8/x)*y MHz。
AHB总线上时钟由系统时钟PLLCLK经过z分频得到,HCLK = PLLCLK/z。
APB2上的总线时钟PCLK2经过HCLK的m分频得到,PCLK2 = HCLK/m。
APB1上的总线时钟PCLK1经过HCLK的n分频得到,PCLK1 = HCLK/n。
外设时钟举例: 挂在高速总线APB2上的ADC时钟经过APB2总线时钟2分频得到,即ADCCLK = PCLK2/2 。
外设时钟举例:挂在低速总线APB1上的TIM2时钟经过APB1总线时钟2分频得到,即TIM2CLK = PCLK1/2 。
2. STM32的定时器典型配置之溢出中断
(1)定时器分类
STM32的物理定时器解决了MCU单任务运行使用CPU计数对性能的影响,定时器根据功能从多到少分为高级定时器、通用定时器、基本定时器。低功耗定时器、看门狗定时器、某些MCU还有HRTIM等。
(2)定时器挂在哪条总线上
以STM32F10x系列的MCU为例,TIM1/8挂在APB2高速总线上,TIM2-7挂在APB1低速总线上。
(3)定时器初始时钟频率
有人说如果APB1和APB2经过HCLK都进行1分频,那么TIM1/8的时钟为APB2的时钟,TIM2-7的时钟为APB1的时钟。
如果APB1和APB2经过HCLK进行分频,分频系数不为1,那么TIM1/8的时钟为APB2时钟的两倍,TIM2-7为APB1的时钟的两倍。
在实际应用中,要根据不同的MCU和时钟系统配置得到相应定时器的初始时钟频率。
(4)定时器计数时钟频率
所谓计数时钟频率,就是上面提到每种外设具体时钟频率还要经过外设本身的外设分频(PSC)配置,从而得到最终定时器时钟频率,这个频率就是定时器每计数一次花的时间。
(5)在CubeMX中定时器的配置
下面是对TIM2配置的实例: