中断

中断

概念

相当于你在打游戏但是老妈叫你去拖地,为了不被挨骂你得放下游戏去老实拖地,拖完地继续打游戏。。。(╥﹏╥…

用来干嘛?

  1. 实时控制:在确定时间内对相应事件作出反应。(温度监控)
  2. 故障处理:需要第一时间处理紧急情况。(机器卡住了)
  3. 数据传输:不知道什么时候数据来。(串口数据接收)

处理过程

GPIO(上拉/下拉/浮空)—GPIOXy→GPIOIy—EXTI—NVIC—CPU

NVIC

概念

嵌入向量中断控制器,属于内核(M3/4/7)

支持256个中断(16+240),256个优先级,允许裁剪。

STM32F103有10个内核中断,60个外部中断,16个中断优先级

中断服务函数:定义一块固定的内存,4字节对齐,存放各个终端服务函数程序的首地址;

中断向量表定义在启动文件,当发生中断,CPU会自动执行对应的终端服务函数。(.s)文件

寄存器介绍

Untitled.png

工作原理

SHPR右侧少了个箭头(内核中断优先级最低)

SHPR右侧少了个箭头(内核中断优先级最低)

中断优先级及其分组

  1. 抢占优先级
  2. 响应优先级(子优先级)
  3. 自然优先级:中断向量表里的优先级
    1. 数值越小,优先级越高

分组:

提示:一个工程一般只设置一次中断优先级分组。

Untitled

参考xx编程手册4.4.5节

怎么使用?

  1. 设置中断分组(SCB_AIRCR)
  2. 设置中断优先级IP(NVIC_IPRx)
  3. 使能中断(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支持的外部中断/事件请求

Untitled

EXTI主要特性(F1/F4/F7系列

每条EXTI线都可以单独配置:选择类型(中断/事件)、触发方式(上升沿/下降沿/双边沿)、支持软件触发、开启/屏蔽、有无挂起状态位(中断)。

EXTI工作原理(F1/F4/F7

Untitled

  1. 边沿检测
  2. 软/硬件触发(或)
  3. 中断屏蔽/清除(与)
  4. 事件屏蔽(与)

了解寄存器:(见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,用于重映射和外部中断映射配置

功能:

  1. 外部中断配置:APIO_EXTICR14,配置EXTI中断线015对应到哪个具体IO口
  2. 重映射配置:AFIO_MAPR,部分外设IO重映射配置
  3. 调试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按照优先顺序依次处理中断

Untitled

配置步骤

  1. 使能GPIO时钟
  2. 设置GPIO输入模式(上、下拉、浮空)
  3. 使能AFIO/SYSCFG时钟:开启寄存器
  4. 设置EXTI和IO的映射关系:选PA~PK哪组和IO对应EXTI输入线,AFIO_EXTICR/SYSCFG_EXTIC
  5. 设置EXTI屏蔽,上下沿:设置EXTI对应通道的屏蔽和上升/下降沿触发,分别对应寄存器:IMR、RTSR/FTSR
  6. 设置NVIC:分三步:设置优先级分组,设置优先级,使能中断
  7. 设置中断服务函数,清中断标志

STM32 EXTI的HAL库设置步骤(GPIO外部中断

  1. 使能GPIO时钟:_HAL_RCC_GPIOx_CLK_ENABLE(x指的是A~K)
  2. GPIO/AFIO(SYSCFG)/EXTI:使用HAL_GPIO_Init
  3. 设置中断分组:HAL_NVIC_SetPriorityGrouping,此函数仅设置一次!
  4. 设置中断优先级:HAL_NVIC_SetPriority
  5. 使能中断:HAL_NVIC_EnableIRQ
  6. 设计中断服务函数:EXITx_IRQHander,中断服务函数,清除中断标志。(.s文件)
    1. STM32仅有EXTI0~4(5个)、EXTI9_5、EXTI15_10、七个外部中断服务函数

通用外设驱动模型(四步法)

Untitled

HAL库中断回调处理机制介绍

较复杂,需要啥学啥就行。

Untitled

posted @   残肢  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示