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

STM32U5 外部中断不响应问题分析

关键字: EXTI

1. 问题背景

客户的终端客户反馈产品会有偶发性的功能异常。问题比较难以复现。

经过调查,在 BOOT 程序跳转到 APP1 程序中时相对比较容易复现问题。查看客户代码,发现客户在 BOOT 程序中会对 EXTI 进行初始化,跳转到 APP 程序后,客户工程师在 APP 中再次对 EXTI 初始化。

检查 EXTI 相关寄存器描述。发现在初始化 EXTI_RTSR1@RTx 寄存器时,在写寄存器期间,如果上升沿信号产生,此时可能无法将相应的挂起位置位,从而导致丢失中断。会不会是这个原因导致的呢?寄存器截图如下:

图1. EXTI_RTSR1@RTx 寄存器描述

客户描述丢中断是在第二次初始化时导致的,但是第二次初始化并没有改变任何配置。即使在第二次进行了初始化,应该也不会导致中断丢失。

2. 问题复现

测试配置:

        硬件测试平台 NUCLEO-STM32U575+ NUCLEO-STM32H503

软件工具版本:

        STM32CubeMX Version : 6.12.0
        STM32Cubeide Version : 1.16.0

2.1. 两次初始化 EXTI 测试
2.1.1. 测试接线

图2. 硬件连接配置

图3. 接线配置

2.1.2. 测试配置

开始在 U575 进入第二次初始化之前产生触发信号给 H503,H503 检测到 U575 产生的起始触发信号后,H503 会产生一个上升沿给到 U575,这个上升沿的产生的时机每次增加一个 NOP 延时,U575 如果检测到 H503 产生的上升沿信号则进行软复位,如果没有检测到触发信号则将 PB10 拉高,以此去遍历所有的触发信号的触发点。

2.1.3. 测试代码

U575 代码:
第二次初始化代码

H503 代码:

2.1.4. 测试结果

CHA(蓝色):测试点 NUCLEO-H503_PA0 U5 产生的触发信号,U5 在进第二次初始化时 U5 会产生触发信号触发 H5 进入中断,H5 进入中断后会递加 NOP 延时后产生触发 U5 进入中断的信号

CHB(红色):测试点 NUCLEO-H503_PA1 H5 产生的触发 U5 进入中断的信号。

CHC(绿色):测试点 NUCLEO-U575_PB11 指示 U5 代码执行位置的信号。

CHD(黄色):测试点 NUCLEO-U575_NRST U5 的复位管脚。

CHE(紫色):测试点 NUCLEO-U575_PB10 指示 U5 接收到触发信号后未进入中断,执行到 while(1)循环将 PB10 拉高,示波器以这个通道的上升沿进行触发,去抓取不能触发中断的波形

测试波形如下:

图4. 测试波形

A 点放大波形如下图:
最后一次正常响应中断

图5. A 点

B 点放大波形如下图,未能响应中断。

图6. B 点

2.2. 分析

图7. 未响应中断波形分析

从测试波形来看随着时间的推进, 在进入第二次初始化 EXTI 时 U5 在 A 点产生触发信号,触发 H5 产生上升沿信号。在 B 点时,H5 产生上升沿信号,测试代码执行到 b-c 段,此时触发信号的到来,MCU 并未响应这个中断。此时正在设置 EXTICR 寄存器。而这个寄存器是用来配置复用开关的寄存器。

图8. EXTI mux GPIO 选择

3. 小结

MCU 设置 EXTICR 寄存器时,即使我们不改变 EXTICR 中的值,在 EXTICR 上操作时也会使用 MUX,这可能是导致出现中断无响应窗口的原因。建议客户的 EXTI 的初始化只在 Boot中做一次就可以了。
 

http://www.dtcms.com/a/318513.html

相关文章:

  • 【android bluetooth 协议分析 03】【蓝牙扫描详解 4】【BR/EDR扫描到设备后如何上报给app侧】
  • PHP 继承与静态机制深度解析
  • 防御保护综合练习
  • 北斗变形监测技术应用解析
  • HTTP Flood攻击:数字时代的“蝗虫灾害“与智能防护之道
  • AI推理新高度:Claude Opus 4.1如何解决复杂逻辑问题
  • SELinux 安全机制详解与管理
  • AI_提示词Prompt
  • 大模型后训练——Online-RL基础
  • Godot ------ 自定义布局以及自定义引擎风格
  • 8.6日作业
  • 五、Envoy集群管理
  • Redis Redis 常见数据类型
  • TFTP: Linux 系统安装 TFTP,文件系统启动后TFTP使用
  • Java 启动命令的完整解析
  • 【渲染流水线】[应用阶段]-[裁剪]以UnityURP为例
  • GeoTools 结合 OpenLayers 实现缓冲区分析
  • LINQ 要点
  • 92、【OS】【Nuttx】【构建】cmake 支持构建的目标
  • SOD-YOLO:增强基于YOLO的无人机影像小目标检测
  • Product Hunt 每日热榜 | 2025-08-06
  • GoogLeNet训练
  • FastDeploy2.0:Error reading file: SafeTensorError::MetadataIncompleteBuffer
  • chdir系统调用及示例
  • 【C/C++】形参、实参相关内容整理
  • 零基础-动手学深度学习-8.7. 通过时间反向传播
  • Spring_事务
  • 国产3D大型装配设计新突破①:图纸打开设计双加速 | 中望3D 2026
  • C语言的数组与字符串练习题2
  • 如何快速翻译PPT中的文字(或简繁体转换)