配置基本定时器TIM6的相关系数
配置时只需要关注分频值和预装载值即可。
分频值由TIM6的最大时钟值确定。由于TIM6是挂在APB1上的, 其时钟最大为1/2AHB时钟(即1/2 * 90MHz=45MHz),经过TIM6自带的倍频器后值为45MHz*2=90MHz
预装载值由计数器寄存器确定,通俗讲,就是每次溢出值计一个数, 计多少个数后,将标志位置一。
例如, 如果需要定时1秒, 那么, 只需将时钟源周期定为100us(即100us溢出一次,并计数一次), 然后计数器记10000次后,即可得到1S时间的标志位。(100us*10000=1000ms = 1s)
分频值计算方法:
由于 计数器频率 = TIM6最大频率/预分频器值
例如 需要其输出100us周期的时钟, 那么计数器频率 等于该周期的倒数 = 10000Hz,
TIM6最大频率为90Mhz(90,000,000Hz) , 那么就推出预分频值 = 90Mhz/10,000Hz = 9,000
(技巧:将时钟源设定为100us, 那么分频值就是恒定的9000, 需要计时1ms,就是10个100us, 将预装载值设定为10即可。10微秒,就是100)
将计算出的分频值和预装载值输入CubeMX即可, 然后生成代码。
生成的HAL库代码属于傻瓜编程。只需要在USER CODE BEGIN和END直接填入自己的代码即可, 完全不需要关注底层。
首先在主函数中找到 初始化的部分, 并在用户代码区填入 启动TIM6的HAL库函数。
调用HAL_TIM_Base_Start_IT(&htim6);
之后,在后面的函数区的用户代码区,填入触发标志位后的动作即可。
调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
自此, 每隔1秒, Flag 都会置一一次。
CUBE开发环境的HAL库果然够粗暴,,,,不用去管中断服务函数, 也不用去管固件库里的各种寄存器结构体配置,直接封装成两句代码,让STM32比51还简单。。。