0、先完成基础配置 SYS ,RCC,路径,时钟等的配置
1、选择定时器2,并选择时钟源为内部时钟
2、分频系数设为7199,计数值设为4999,则定的时间为
(7199+1)(4999+1)/72000000=500ms
3、使能定时器中断
4、选择中断优先级配置。生成代码
5、使用函数HAL_TIM_Base_Start_IT(&htim2);打开定时器2中断
6、stm32f1xx_it.c中,有定时器2的中断服务函数,点击HAL_TIM_IRQHandler(&htim2);转到定义。
7、关于定时器有很多处理,输入捕获,PWM输出等,我们这里主要看定时器的更新。
8、转到定义,找到__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef htim);这也是个回调函数,是虚函数。
9、main.c函数中重定义此回调函数,并编写相关代码
在用回调函数时,发现定时器中断只会有一个回调函数,不同定时器中断触发后调用的是同一个函数,这对有时候想要在不同文件中写不同的定时器中断文件来说可能不太方便,如果有这方面需求,可按照以下方案配置
1、在NVIC的Code generation中取消生成定时器2的中断服务函数,还是要使能定时器,生成代码,生成代码后还是要打开定时器中断。生成代码
2、在main.c中重新写定时器2的中断服务函数,记得清除中断服务函数标志位。
void TIM2_IRQHandler(void)
{
if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE) != RESET)
{
__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE);
}
}