定时器的基础知识
STM32F4 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2—TIM5,TIM9~TIM14 等通用定时器,还有 TIME6 和 TIME7 等基本定时器,总共达 14 个定时器之多。但我们日常主要是以通用定时器为主。
一.定时器相关寄存器
1)计数器当前值寄存器CNT:
这里面进行数据的向上计数和向下计数,储存了当前定时器的计数值。
2)预分频寄存器TIMx_PSC:
将定时器时钟源进行分频输出,降低定时器时钟(CK_CNT)的频率,来获取想要的定时器时钟频率。
3)自动重装载寄存器TIMx_ARR:
存储着重新装载时需要的值,假设向下计数,当CNT中的值到达0时,计时器读取ARR中的值,并赋值给CNT,使之重新计数。而当向上计数时,当CNT中的值达到了ARR中提前设定的值,就会终止本次计数。
4)状态寄存器(TIMx_SR):
该寄存器用来标记当前与定时器相关的各种事件/中断是否发生。
二 定时器的各个参数
1): Prescaler:定时器预分频设置,时钟源经过该分频器才是定时器时钟,它设定 TIMx_PSC 寄存器的值。可设置值范围为 0~65535,实现 1 至 65536 分频。
2): CouterMode:定时器计数方式,及控制定时器是向上计数,向下计数还是中央计数。
3): Period:定时器周期,可设置值为 0~65535。假设在定时器预分频我们已经得到分频后的时钟为 1MHz。Period 的值我们设置为 1000,这样,定时器产生中断的频率为:1MHz/1000=1KHz,即为 1ms 的定时周期。
4): ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与数字滤波器采样时钟频率分频比。
5): RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常轻松控制输出 PWM 的个数。
三 实验相关代码
- 使能相关定时器:
HAL_TIM_Base_Start_IT(&htim1); //定时器1使能
- 重写中断回调函数:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == htim1.Instance) {
...//定时器1中断业务
}
...
}
补充:
- 重写函数:
为了方便他人更好的操作stm32,他的的库函数中有很多以_weak标题的函数,我们可以以这个函数名重写此函数将其覆盖掉。 - 回调函数:
回调函数是以另一个函数的指针为参数,旨在调取使用另一个函数