一、CubeMX设置
1. 晶振配置(72M)
2. 选择内部时钟
3. 基础配置(1秒)
4. 开启定时器中断
Preemption Priority为中断优先级,越小中断优先级越高
二、代码实现
1. mian主函数开启定时器中断
在实际使用中发现,在初始化后,第一次调用HAL_TIM_Base_Start_IT()函数启动定时器的时候,有个软件上的小BUG。
当调用 HAL_TIM_Base_Start_IT()函数后,会先进入一次回调函数,然后才进行定时器计数。在我们正常的使用中,当调用HAL_TIM_Base_Start_IT()函数后,定时器进行计数,当达到计数值后,才进入回调函数。所以需要在前面增加清除中断标志位的代码,下面有具体解决方法。
// 检查更新事件标志是否被设置
if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE) != RESET) {
// 清除更新事件标志
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE);
}
//启动定时器
HAL_TIM_Base_Start_IT(&htim3);
2. 定时器中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
if(htim == &htim3){
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_15);//每1秒后LED电平取反
}
}