当前位置: 首页 > news >正文

STM32学习记录--Day5

今天了解了:

中断

中断有多个类别包括:USART中断,I2C中断等;

并通过NVIC来分配中断的优先级

EXTI

EXTI的内部结构:

EXTI线

🔧 ​​一、EXTI系统核心架构​

1. ​​中断源输入(左上区域)​
  • ​GPIO引脚​​:
    支持最多4个GPIO端口(A/B/C/D)的引脚作为中断源。
    ​注意​​:每个GPIO引脚都能触发中断。
  • ​信号合并​​:
    多个GPIO引脚通过 ​​“多路选择器(MUX)”​​ 汇合到一条EXTI线上。
    ​关键限制​​:​​同一时间,每条EXTI线只能连接一个GPIO引脚!​
2. ​​中断线分配(中间黄色铃铛图标)​
  • ​EXTI线数量​​:
    共有​​20条独立中断线​​:
    • EXTI0~EXTI15:​​16条通用线​​(可分配给任意GPIO引脚)
    • EXTI16~EXTI19:​​4条专用线​​(用于特定事件,如PVD、RTC闹钟等)
  • ​资源复用​​:
    EXTI0可同时被PA0、PB0、PC0、PD0使用,但只能选择其中一个。
3. ​​中断触发逻辑(右上区域)​
  • 每条EXTI线可独立配置​​触发模式​​:
    • 上升沿触发(Rising Edge
    • 下降沿触发(Falling Edge
    • 双边沿触发(Both Edges
  • 中断信号最终传递到 ​​NVIC(嵌套向量中断控制器)​​,执行用户中断服务函数。

⚙️ ​​二、GPIO与EXTI的绑定规则​

1. ​​引脚号决定EXTI线号​
  • ​引脚0(如PA0/PB0)→ 绑定到EXTI0​
  • ​引脚1(如PA1/PB1)→ 绑定到EXTI1​
  • ...
  • ​引脚15(如PA15/PB15)→ 绑定到EXTI15​
2. ​​端口选择(通过AFIO寄存器配置)​
  • ​示例代码(STM32标准库)​​:
  • 以中断优先级分组2为例:
  • 	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  • //#1.初始化PA5和PA6RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;//PA5GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStruct);//PA6GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStruct);	//#2.为EXTI5和EXTI6分配引脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);//#3.初始化EXTI的线EXTI_InitTypeDef EXTI_InitStruct;EXTI_InitStruct.EXTI_Line = EXTI_Line5;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStruct);EXTI_InitStruct.EXTI_Line = EXTI_Line6;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStruct);//#4.配置NVICNVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);

⚠️ ​​三、重要设计约束​​​

  1. 专用中断线​​:

    • EXTI16:连接PVD(可编程电压检测)
    • EXTI17:连接RTC闹钟
    • EXTI18:连接USB唤醒事件
    • EXTI19:连接RTC入侵检测
      ​注意​​:这些线无法分配给GPIO引脚。

💎 ​​四、总结与配置流程​

  1. ​硬件连接​​:
    确定要用作外部中断的GPIO引脚(如PA0)。

  2. ​EXTI线映射​​:
    根据引脚号选择EXTI线(如PA0 → EXTI0)。

  3. ​端口绑定​​:
    AFIO_EXTICR寄存器中设置EXTI0的信号源为GPIOA(而非GPIOB等)。

  4. ​中断参数配置​​:

    • 选择触发模式(上升沿/下降沿/双边沿)
    • 使能中断(EXTI->IMR寄存器)
    • 在NVIC中启用该EXTI线的中断请求
  5. ​实现中断服务函数​​:
    编写EXTI0_IRQHandler()函数并清除中断标志。

http://www.lryc.cn/news/607533.html

相关文章:

  • 操作系统-lecture4(进程的调度)
  • win10 VC++6.0 应用程序无法正常运行 0xc0000142,应用程序无法正常启动,报错“0xc0000142”,解决办法
  • 深度解读 CSGHub:开源协议、核心功能与产品定位
  • Springboot 配置 doris 连接
  • Spring Boot 异步执行方式全解析:@Async、CompletableFuture 与 TaskExecutor 对比
  • JavaWeb笔记2-JavaScriptVueAjax
  • 备案主体更换期间网站可以访问吗
  • opencv-python的GPU调用
  • 树莓派GPIO介绍 + LED控制
  • 智能Agent场景实战指南 Day 28:Agent成本控制与商业模式
  • xcode swift项目运行、连接真机运行报错,引入文件夹失败
  • [2025CVPR-图象生成方向]ODA-GAN:由弱监督学习辅助的正交解耦比对GAN 虚拟免疫组织化学染色
  • python PIL图片转base64字符串
  • 练习javaweb+mysql+jsp
  • 告别“AI味”图像!最新开源AI模型FLUX.1-Krea实现真实光影生成
  • [CISCN 2022 初赛]online_crt
  • 【PHP 自动加载机制详解】
  • 四、基于SpringBoot,MVC后端开发笔记
  • Qwen2 RotaryEmbedding 位置编码仅仅是第一层有吗
  • 提问总结2
  • Eden 和 Survivor 比例可以调整么,参数是什么?还用到了哪些参数?
  • SpringCloud(一)微服务基础认识
  • U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?
  • 04 基于sklearn的机械学习-梯度下降(上)
  • Linux内核构建系统中的auto.conf与autoconf.h:原理与作用解析
  • ARM Cortex-M 处理器的应用
  • NDI开发指南
  • LeetCode 热题100:206. 反转链表
  • 深入讲讲异步FIFO
  • 向华为学习——IPD流程体系之IPD术语