普通定时器中断进行配置的步骤
- CubeMX配置定时器
时钟使用内部时钟,TIM2在APB2总线上,频率为64M,设定预分频系数6399和自动装载值99,则更新周期为1/(64000000/(6399+1))*(99+1)=10(ms)
- 配置时钟,本次使用系统内部时钟
- 配置定时器中断优先级
- 生成代码后打开工程文件
在主循环while()前的用户代码处增加定时器中断开启代码:
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */
- 在stm32f1xx_it.c中的对应定时器中断服务函数中找到:
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
/* USER CODE END TIM2_IRQn 0 */
HAL_TIM_IRQHandler(&htim2);
/* USER CODE BEGIN TIM2_IRQn 1 */
/* USER CODE END TIM2_IRQn 1 */
}
该函数为TIM2中断服务函数,TIM2所有类型的中断都会进入这个函数,并通过
HAL_TIM_IRQHandler(&htim2)
HAL库定时器中断服务函数,来判断中断的类型以及清除中断标志位。
在void TIM2_IRQHandler(void)
后面的用户代码区域添加周期中断回调函数:需要在其中判断是哪个定时器。
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(TIM2==htim->Instance)//判断定时器
{
if(Times_10ms_sign<6000)
Times_10ms_sign++;
else
Times_10ms_sign = 0;
if(!(Times_10ms_sign%50))
HAL_GPIO_TogglePin(MCU_LED_GPIO_Port,MCU_LED_Pin);
}
}
/* USER CODE END 1 */
之后编译程序烧写程序就能看到LED按照需求频闪了。