最近忙着期末考试一直没动32,还给自己新开了ros的新坑事情。今天浅浅复习了一下关于基于hal库开发的stm32之定时器中断,在此浅浅总结一下吧。
首先是cubemx的配置。
第一步,配置HSE(外部高速时钟)源为外部晶振。
第二步,选择SYS这里将Debug配置成如图Serial Wire,对应io口显示被占用。
配置定时器TIM2,选择时钟为内部时钟,定时500ms。(在此之前还有一步配置时钟树的步骤,将时钟数频率设置为32MHZ)。
配置完cubemx,下面我们进入代码的编写。
首先找到文件名为stm32f1xx_it.c的文件,找到函数TIM2_IRQHandled(),我们看到这个函数下还调用了一个叫HAL_TIM_IRQHandler()的函数,我们进入这个函数。
在这个函数下能找到一个属于定时器中断的回调函数HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)函数。
我们需要按照任务目标重写这个函数,我写在了main.c文件下。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==&htim2)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
}
}
现在,我们需要在main函数中使能定时器中断(否则无法正常运行)
这里要先判断是否是htim2引起的中断。
判断函数还可以这么写,利用指针的概念指向TIM2
if(htim->Instance==TIM2)
HAL_TIM_Base_Start_IT(&htim2);
while(1)
{
...
}
如上就是简单的定时器开发啦