粗谈 STM32 HAL库的中断

本文基于本人在STM32F4使用上的理解,若有不正确的地方请留言!
用过STM32 STD标准库的人都应该知道 当硬件中断来临时, 比如TIM3的溢出中断,其步骤程序首先进入void TIM3_IRQHandler(void)的中断服务函数,但是触发TIM3中断的情况有很多种,如图1 有更新中断标志,捕获中断标志等等,因此进入中断服务函数后,得判断中断标志位是否置位,再写用户的应用程序,当退出中断时得将中断标志位复位,否则会无限进入该中断函数,图二为中断函数配置
粗谈 STM32 HAL库的中断粗谈 STM32 HAL库的中断
但是在HAL库中,HAL库中相当于对标准库函数的再一次封装,使得使用更加的方便,方便移植,但是缺点是影响性能,
粗谈 STM32 HAL库的中断
如上图是HAL库中当中断来临时的标准配置过程,当中断来临时,首先由硬件进入void TIM5_IRQHandler(void)的中断函数,该中断函数内运行的是 HAL_TIM_IRQHandler(&htimx_Encoder),该函数判断每个中断标志位是否置位,比如当触发输入捕获中断 会调用void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) 函数,中断标志会在 HAL_TIM_IRQHandler(&htimx_Encoder)函数判断完之后复位,
粗谈 STM32 HAL库的中断
TIM_HandleTypeDef结构体描述了当前活动的定时器号,活动的通道等等状态。

因此在HAL库中,中断函数执行了过多的程序,影响单片机的性能,最好在中断内用寄存器操作,为了能尽快退出中断。