一片伟大的净土

灵魂的归处,肉体的坟墓。

STM32的外部中断EXTI

EXTI,External Interrupt,外部中断(同时是一个具体存在的硬件模块)
通过芯片的外部引脚,如检测GPIO引脚的电平变化,EXTI会向CPU(中央处理器,MCU是微型控制单元)发送中断
跳转到中断服务函数
中断模式:触发CPU中断,执行中断服务函数(软件代码处理)
事件模式:直接触发其他硬件操作(如唤醒CPU,启动DMA传输)无需CPU干预。
支持多路信号,但同一时刻只能选择一个(PA0,PB0,PC0均可映射到EXTI0,但只能同时启用一个)

应用流程:

  1. 时钟使能
  2. GPIO配置,并通过AFIO将GPIO映射到EXTI
  3. EXTI中断配置
  4. NVIC中断优先级配置
  5. 中断服务函数,清除中断标志

讲解:

  1. 通过RCC(Reset and Clock Control)时钟模块启动GPIO和AFIO
  2. 配置为输入模式(注意上拉或者下拉,悬空不确定)供EXTI监听端口变化(机械开关(如按键)在按下或释放时,由于金属触点的弹性,会产生多次短暂的电平跳变,硬件并联电容或者软件延时),并映射到EXTI线,AFIO,Alternate Function I/O(复用功能I/O,管理引脚复用和重映射)
  3. SET和RESET就是true和false,都是1和0,但是在硬件方面,RESET还能代表复位,SET代表置位
  4. 当 EXTI 检测到触发条件(如上升沿)时,会设置一个中断标志位(例如 EXTI_PR 寄存器的对应位),表示有中断请求未处理。清楚标志只是确认本次中断已处理,不影响后续中断监听。
    ​中断向量表:在 STM32 的启动文件(如 startup_stm32f10x.s)中,定义了所有中断服务函数的入口地址(即中断向量表)。例如:
    EXTI0_IRQHandler ; EXTI 线 0 的中断服务函数入口
    EXTI1_IRQHandler ; EXTI 线 1 的中断服务函数入口
    中断向量表存储的是这些函数的入口地址,而不是函数代码本身。中断触发时,CPU 通过向量表找到函数地址并跳转执行。

代码:
优先级数字越小越高,主能抢断主小的,子优先级和主一样
如果抢占优先级和子优先级均相同,则比较 硬件中断的默认IRQ编号(由芯片设计决定),编号 越小 的中断优先级越高。
共享通道就是只有一个函数入口
EXTI_Line标识具体的外部中断线路(选择硬件线路区域)
NVIC标识中断通道,用于NVIC管理和响应中断(选择中断服务函数区域)
实际上无法选择,都是芯片定义好了,如stm32f10x.h里面,然后在stm32f10x_it.c编写中断服务函数(而非main.c)
怎么询问,多问就会了

吴工的中断代码:
timer.c and timer.h

外部中断也要考虑机械颤抖,按钮的灵敏度,按下去亮好几次那种
按下去是导通,下降沿,改成上升沿就可以是按钮抬起来亮灯

another:TIM定时器也有中断