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)中断 |