中断
概念
相当于你在打游戏但是老妈叫你去拖地,为了不被挨骂你得放下游戏去老实拖地,拖完地继续打游戏。。。(╥﹏╥…
用来干嘛?
- 实时控制:在确定时间内对相应事件作出反应。(温度监控)
- 故障处理:需要第一时间处理紧急情况。(机器卡住了)
- 数据传输:不知道什么时候数据来。(串口数据接收)
处理过程
GPIO(上拉/下拉/浮空)—GPIOXy→GPIOIy—EXTI—NVIC—CPU
NVIC
概念
嵌入向量中断控制器,属于内核(M3/4/7)
支持256个中断(16+240),256个优先级,允许裁剪。
STM32F103有10个内核中断,60个外部中断,16个中断优先级
中断服务函数:定义一块固定的内存,4字节对齐,存放各个终端服务函数程序的首地址;
中断向量表定义在启动文件,当发生中断,CPU会自动执行对应的终端服务函数。(.s)文件
寄存器介绍
工作原理
SHPR右侧少了个箭头(内核中断优先级最低)
中断优先级及其分组
- 抢占优先级
- 响应优先级(子优先级)
- 自然优先级:中断向量表里的优先级
- 数值越小,优先级越高
分组:
提示:一个工程一般只设置一次中断优先级分组。
参考xx编程手册4.4.5节
怎么使用?
- 设置中断分组(SCB_AIRCR)
- 设置中断优先级IP(NVIC_IPRx)
- 使能中断(NVIC_ISERx)
*assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); //判断形参是否有效
HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
//中断号 抢占优先级 响应优先级*
EXTI
概念
External interrupt/event Controller: 外部(扩展)中断控制器
包含20个产生事件/中断请求边沿检测器,即20条EXTI线(F1)
中断和事件的理解:
- 中断:要进入NVIC,有相应的中断服务函数,需要CPU处理
- 事件:不进入NVIC,仅用于内部硬件自动控制的,如:TIM、DMA、ADC。。
EXTI支持的外部中断/事件请求
EXTI主要特性(F1/F4/F7系列
每条EXTI线都可以单独配置:选择类型(中断/事件)、触发方式(上升沿/下降沿/双边沿)、支持软件触发、开启/屏蔽、有无挂起状态位(中断)。
EXTI工作原理(F1/F4/F7
- 边沿检测
- 软/硬件触发(或)
- 中断屏蔽/清除(与)
- 事件屏蔽(与)
了解寄存器:(见xx参考手册9.3
- EXTI_FTSR
- EXTI_RTSR
- EXTI_IMR
- EXTI_PR
[EXTI和IO映射的关系]
解决链接部分表格中与GPIO映射的关系
AFIO简介(F1)(xx参考手册8.4.3-8.4.6
Alternate Function IO,复用功能IO,用于重映射和外部中断映射配置
功能:
- 外部中断配置:APIO_EXTICR14,配置EXTI中断线015对应到哪个具体IO口
- 重映射配置:AFIO_MAPR,部分外设IO重映射配置
- 调试IO配置:AFIO_MAPR[26:24],配置JTAG/SWD的开关状态