跳转至

STM32中断

引言

某些事件需要快速反应,若用轮询会浪费时间。将事件判断交给机器,发生时保存当前“现场”,执行处理函数,完成后回到原来程序,这就是中断。

中断

systick也是在AHB总线上的外设,所以使用中断时会导致delay函数(使用了systick)的失效。可以通过改变systick的优先级修复。

外设实现中断的流程:GPIO -> EXTI -> NVIC -> IRQ handler -> cplt callback -> ISR

NVIC指向IRQ函数,IRQ中调用callback,ISR在主程序中。

EXTI触发中断。NVIC索引IRQ函数地址。IRQ分辨使用相同通道的外设。callback清除IT触发标志位,

中断在HAL库中的实现

在HAL库中,中断有以下几个重要接口:

  • IRQ handler
  • callback

IRQ handler 是HAL库提供的中断处理函数。如在uart1中,NVIC指向UART1_IRQ,UART1_IRQ中调用HAL_UART_IRQHandler(&huart1),传递uart句柄。所以IRQHandler一个函数将处理多个uart中断。

callback 为中断提供了对特定事件的回调函数,如传输完成回调RxCpltCallback。回调在IRQ handler中调用,并被传递uart句柄。所以说 callback 也是一个函数处理多个中断。

callback 实现了解耦的作用,一般情况下用户应该使用 callback 的重定义来实现中断任务,避免在IRQ handler中处理任务。

IRQ 有以下几种,其中加粗的是常用的:

词汇表

缩写 意义
interrupt 中断
EXTI external interrupt/event controller 外部中断/事件控制器
EX external TI trigger interrupt
NVIC nested vectored interrupt controller 嵌套向量中断控制器
IRQi nterrupt request 中断请求
ISR interrupt service routine 中断服务程序、中断处理函数
handler 句柄(函数)
callback 回调(函数)
cplt complete 完成
flag 标志
status 状态
IT interrupt trigger (如 stm32f10x_it.c)中断