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

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.xdnf.cn/news/16876.html

相关文章:

  • 《C++》STL--list容器详解
  • EasyExcel 公式计算大全
  • 谷歌Firebase动态链接将失效:如何选择深度链接替代方案?
  • 11.Layout-Pinia优化重复请求
  • 51单片机入门:模块化编程
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(下)
  • 【string类常见接口】
  • 智能Agent场景实战指南 Day 28:Agent成本控制与商业模式
  • C语言(02)——标准库函数大全(持续更新)
  • Spring Boot + MongoDB:从零开始手动配置 MongoConfig 实战
  • C语言:冒泡排序
  • 【3】交互式图表制作及应用方法
  • kafka快速部署、集成、调优
  • 香港正式启动稳定币牌照制度!推动中国的人民币国际化?
  • 智能Agent场景实战指南 Day 29:Agent市场趋势与前沿技术
  • ALOcc: Adaptive Lifting-based 3D Semantic Occupancy and
  • 异步函数被调用多次,多次处理同一个文件导致占用,如何让异步函数按顺序执行?
  • 【Node.js安装注意事项】-安装路径不能有空格
  • RustFS:高性能文件存储与部署解决方案(MinIO替代方案)
  • 10.Linux 用户和组的管理
  • 【智能协同云图库】第七期:基于AI调用阿里云百炼大模型,实现AI图片编辑功能
  • Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
  • webpack面试题及详细答案80题(41-60)
  • 【科研绘图系列】R语言绘制环状分组显著性柱状堆积图
  • iOS 抓不到包怎么办?全流程排查思路与替代引导
  • 机械学习中的一些优化算法(以逻辑回归实现案例来讲解)
  • 带root权限_中国移动创维DT541_S905L3融合机器改机顶盒刷机教程 当贝纯净版安卓9.0系统线刷包 刷机包
  • Git 命令使用指南:从入门到进阶
  • 字节跳动招AI for Science算法研究员(AI分子动力学)
  • 图论-最短路Floyd算法