中断
中断
概念
相当于你在打游戏但是老妈叫你去拖地,为了不被挨骂你得放下游戏去老实拖地,拖完地继续打游戏。。。(╥﹏╥…
用来干嘛?
- 实时控制:在确定时间内对相应事件作出反应。(温度监控)
- 故障处理:需要第一时间处理紧急情况。(机器卡住了)
- 数据传输:不知道什么时候数据来。(串口数据接收)
处理过程
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的开关状态
_HAL_RCC_AFIO_CLK_ENABLE();//对应RCC_APB2ENR寄存器位0
与IO映射关系
对应关系:例如,EXTI[0]对应P[A-K]0
映射图
寄存器参考手册8.4.3
如何使用中断
过程:GPIO外部中断设置输入模式、AFIO/SYSCFG设置EXTI和IO映射关系(EXTI0—15)[还有其他看图]、进入EXTI、设置中断分组、优先级、使能:NVIC(中断管家、CPU按照优先顺序依次处理中断
配置步骤
- 使能GPIO时钟
- 设置GPIO输入模式(上、下拉、浮空)
- 使能AFIO/SYSCFG时钟:开启寄存器
- 设置EXTI和IO的映射关系:选PA~PK哪组和IO对应EXTI输入线,AFIO_EXTICR/SYSCFG_EXTIC
- 设置EXTI屏蔽,上下沿:设置EXTI对应通道的屏蔽和上升/下降沿触发,分别对应寄存器:IMR、RTSR/FTSR
- 设置NVIC:分三步:设置优先级分组,设置优先级,使能中断
- 设置中断服务函数,清中断标志
STM32 EXTI的HAL库设置步骤(GPIO外部中断
- 使能GPIO时钟:_HAL_RCC_GPIOx_CLK_ENABLE(x指的是A~K)
- GPIO/AFIO(SYSCFG)/EXTI:使用HAL_GPIO_Init
- 设置中断分组:HAL_NVIC_SetPriorityGrouping,此函数仅设置一次!
- 设置中断优先级:HAL_NVIC_SetPriority
- 使能中断:HAL_NVIC_EnableIRQ
- 设计中断服务函数:EXITx_IRQHander,中断服务函数,清除中断标志。(.s文件)
- STM32仅有EXTI0~4(5个)、EXTI9_5、EXTI15_10、七个外部中断服务函数
通用外设驱动模型(四步法)
HAL库中断回调处理机制介绍
较复杂,需要啥学啥就行。
标签:
STM32单片机入门!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具