中断
打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断。
- 在确定时间内对相应事件作出响应,如:温度监控(定时器中断)。
- 故障处理,检测到故障,需要第一时间处理,如:电梯门夹人了。
- 数据传输:不确定数据何时会来,如:串口数据接收。
高效处理紧急程序,不会一直占用CPU资源。
STM32 GPIO外部中断
- 信号输入到GPIO
- 信号输入到AFIO,GPIOXy->EXTIy
- EXTI可选择屏蔽,或上升沿/下降沿响应。
- NVIC,使能中断、优先级控制。
- 信号到CPU,处理中断。
NVIC
Nested vectored interrupt controller,嵌套向量中断控制器,属于内核(M3/4/7)。
中断向量表
定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址。
中断向量表定义在启动文件(.s文件),当发生中断,CPU会自动执行对应的中断服务函数。
NVIC寄存器
中断优先级基本概念
- 抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断。
- 响应优先级(sub):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断。
- 数值越小,优先级越高。
NVIC的使用
- 设置中断分组:HAL_NVIC_SetPriorityGrouping
- 设置中断优先级:HAL_NVIC_SetPriority
- 使能中断:HAL_NVIC_EnableIRQ
EXTI
External interrupt/event controller,外部中断事件控制器。
包含20个产生事件/中断请求的边沿检测器,即总共:20条EXTI线。
- 中断:要进入NVIC,有相应的中断服务函数,需要CPU处理。
- 事件:不进入NVIC,仅用于内部硬件自动控制,如:TIM、DMA、ADC。
每条EXTI线都可以单独配置:选择类型(中断或者事件)、出发方式、支持软件触发、开启/屏蔽、有挂起状态位。
EXTI和IO映射关系
AFIO:Alternate Function IO,即复用功能IO,主要用于重映射和外部中断映射配置。
- 调试IO配置。
- 重映射配置:AFIO_MAPR,部分外设IO重映射配置。
- 外部中断配置:AFIO_EXTICR14,配置EXTI中断线015对应到哪个具体IO口。
配置AFIO寄存器之前要使能AFIO时钟,__HAL_RCC_AFIO_CLK_ENABLE()
Px0映射到EXTI0
Px15映射到EXTI15
中断使用
EXTI04、EXTI95、EXTI15~10,7个外部中断服务函数。