原子阿波罗开发板systick定时器中断函数不用官方库,想自己写,但始终不执行Callback函数。

2019-07-20 04:00发布

请教坛友,使用阿波罗开发板hal库版本程序,想在SYSTICK中断中自己写中断服务函数,但一直不进这个中断。void HAL_SYSTICK_IRQHandler(void){
  HAL_SYSTICK_Callback();
}

一直执行的中断函数是这个
void SysTick_Handler(void)
{
  HAL_IncTick();
}


不明白为什么会有这样的区别,又不想修改官方的hal库。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
Anyint
2019-07-20 12:44
楼主,我也遇到了同样的问题,在百度上找到了答案。仅供参考,网址连接:https://blog.csdn.net/qq_35872856/article/details/78554593
我在STM32CubeMx中文网上学习《STM32Cube 学习之三:按键输入 》这一章节内容时遇到的这个问题,给出的解决办法参考上面的网址连接,我稍微说明一下。

在Keil中CTRL+F,在当前工程(Current Project)下搜索关键字“SysTick_Handler”,找到这个函数,函数内容为
/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}

发现只有一个  HAL_IncTick(); 函数,缺少我们自己重定义的 HAL_SYSTICK_Callback();函数,那么我们把HAL_SYSTICK_Callback();加在SysTick_Handler()函数里即可。
例如:
/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
  HAL_SYSTICK_Callback();
  /* USER CODE END SysTick_IRQn 1 */
}


这个时候下载工程至单片机,进入调试模式发现HAL_SYSTICK_Callback();已经在实时被调用了~~~
至此解决了HAL_SYSTICK_Callback();函数没有被调用(执行)的问题。

一周热门 更多>