![99b1ba8b6e93722db122bd2261a116fe.png](https://img-blog.csdnimg.cn/img_convert/99b1ba8b6e93722db122bd2261a116fe.png)
定时器(Timer)最基本的功能就是定时了,比如定时发送 USART 数据、定时采集 AD数据等等。如果把定时器与 GPIO 结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产 PWM 控制电机状态是工业控制普遍方法,这方面知识非常有必要深入了解。 STM32F4xx系列控制器有 2 个高级控制定时器、10 个通用定时器和 2 个基本定时器。
![1f3a45d7455b5618b00d6491a5ae135f.png](https://img-blog.csdnimg.cn/img_convert/1f3a45d7455b5618b00d6491a5ae135f.png)
这里通用定时器的时钟频率是由APB1的分频系数决定,如果APB1的预分频系数是1,则通用定时器的时钟频率等于APB1的时钟频率,否则为APB1时钟的2倍。
时钟源
定时器要实现计数必须有个时钟源,基本定时器时钟只能来自内部时钟,高级控制定时器和通用定时器还可以选择外部时钟源或者直接来自其他定时器等待模式。我们可以通过 RCC 专用时钟配置寄存器(RCC_DCKCFGR)的 TIMPRE位设置所有定时器的时钟频率,我们一般设置该位为默认值 0,使得表中可选的最大定时器时钟为 90MHz,即基本定时器的内部时钟(CK_INT)频率为 90MHz。基本定时器只能使用内部时钟,当 TIM6 和 TIM7 控制寄存器 1(TIMx_CR1)的 CEN 位置 1时,启动基本定时器,并且预分频器的时钟来源就是 CK_INT。对于高级控制定时器和通用定时器的时钟源可以来找控制器外部时钟、其他定时器等等模式,较为复杂。
![9d9ffa02620d23718ef8d152e1c24764.png](https://img-blog.csdnimg.cn/img_convert/9d9ffa02620d23718ef8d152e1c24764.png)
使用SystenInit函数初始化的时候,各时钟频率如下: SYSCLK = 72M AHB时钟 = 72M APB1时钟=36M 所以APB1的分频系数=AHB/APB1=2 由此可得CK_INT的时钟频率为2*36M = 72M. 计数器的最终的频率还需要经过PSC预分频计算才能得到