当前位置: 首页 > 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.lryc.cn/news/611493.html

相关文章:

  • Ubuntu设置
  • DevOps时代的知识基座革命:Gitee Wiki如何重构研发协作范式
  • 基于51单片机的温控风扇Protues仿真设计
  • 【面试场景题】电商秒杀系统的库存管理设计实战
  • Python高级排序技术:非原生可比对象的自定义排序策略详解
  • 17.10 智谱AI GLM 篇:ChatGLM3-6B 快速上手
  • LeetCode每日一题,8-6
  • List、ArrayList 与顺序表
  • 软考软件设计师考点总结
  • 模电知识点总结
  • 安卓雷电模拟器安装frida调试
  • mysql优化策略
  • 【Excel】通过Index函数向下拖动单元格并【重复引用/循环引用】数据源
  • WinForm之ListView 组件
  • Ethereum: L1 与 L2 的安全纽带, Rollups 技术下的协作与区别全解析
  • Vue计算属性详解2
  • 无法解析 CentOS 官方镜像源的域名
  • 微软的BitLocker加密
  • 输电线路防外破声光预警装置 | 防山火/防钓鱼/防施工安全警示系统
  • 豆包新模型与PromptPilot工具深度测评:AI应用开发的全流程突破
  • UE编辑器相机窗口运行时相机fov 大小不一致
  • 嵌入式学习的第四十四天-ARM
  • 安装 cuda 版本 PyTorch(2025)
  • 【计算机网络】王道考研笔记整理(3)数据链路层
  • Python 通过Playwright+OpenCV破解滑动验证码 实例
  • 企业级MCP部署实战:从开发到生产的完整DevOps流程
  • 007 前端( JavaScript HTML DOM+Echarts)
  • 深入浅出 RabbitMQ - 主题模式(Topic)
  • 计算机网络:一个 IP 地址可以同时属于 A 类、B 类或 C 类吗?
  • 计算机视觉的四项基本任务辨析