[STM32U5] 实战经验 | STM32U5外部中断不响应问题分析

[复制链接]
407|0
STM新闻官 发表于 2025-9-17 23:04 | 显示全部楼层 |阅读模式
本帖最后由 STM新闻官 于 2025-9-17 23:11 编辑

01问题背景
客户的终端客户反馈产品会有偶发性的功能异常。问题比较难以复现。经过调查,在BOOT程序跳转到APP1程序中时相对比较容易复现问题。查看客户代码,发现客户在BOOT程序中会对EXTI进行初始化,跳转到APP程序后,客户工程师在APP中再次对EXTI初始化。检查EXTI相关寄存器描述。发现在初始化EXTI_RTSR1@RTx寄存器时,在写寄存器期间,如果上升沿信号产生,此时可能无法将相应的挂起位置位,从而导致丢失中断。会不会是这个原因导致的呢?寄存器截图如下:
6844668cace2d18c29.png

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

02问题复现
测试配置:硬件测试平台NUCLEO-STM32U575+NUCLEO-STM32H503软件工具版本:STM32CubeMX Version : 6.12.0STM32Cubeide Version : 1.16.0

2.1. 两次初始化EXTI测试

2.1.1. 测试接线
5774668cacea6e4124.png
4551668caceb76f40a.png

2.1.2. 测试配置开始在U575进入第二次初始化之前产生触发信号给H503,H503检测到U575产生的起始触发信号后,H503会产生一个上升沿给到U575,这个上升沿的产生的时机每次增加一个NOP延时,U575如果检测到H503产生的上升沿信号则进行软复位,如果没有检测到触发信号则将PB10拉高,以此去遍历所有的触发信号的触发点。2.1.3. 测试代码U575 代码:第二次初始化代码
  1. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);__asm("SEV");……HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);// mx_GPIO_Init();__asm("SEV");……__DSB();EXTI->EXTICR[0] = 0x0;__DSB();__asm("SEV");……__DSB();EXTI->RTSR1 = 1<<2;__DSB();__asm("SEV");……__DSB();EXTI->FTSR1 = 0;__DSB();__asm("SEV");……__DSB();EXTI->EMR1 = 0;__DSB();__asm("SEV");……__DSB();EXTI->IMR1 = 1<<2;__DSB();__asm("SEV");……

H503代码:

  1. /* USER CODE BEGIN WHILE */ while (1) { if(temp_EXTI_flag == 1) {temp_EXTI_flag = 0;Pulse_count++;for(uint32_t i = 0;  i<pulse_count;i++) {   __nop();}if(pulse_count="=4294967295){   pulse_count = 0;   pulse_count_circle++;   }    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);   __NOP();……   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);    } /* USER CODE END WHILE */
  2.   /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */}   
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拉高,示波器以这个通道的上升沿进行触发,去抓取不能触发中断的波形测试波形如下:
9161368cacf19700c3.png
A点放大波形如下图:最后一次正常响应中断
6400468cacf2f3f336.png
B点放大波形如下图,未能响应中断。
5414568cacf423e216.png
2.2. 分析
5574768cacf66093ac.png
从测试波形来看随着时间的推进,在进入第二次初始化EXTI时U5在A点产生触发信号,触发H5产生上升沿信号。在B点时,H5产生上升沿信号,测试代码执行到b-c段,此时触发信号的到来,MCU并未响应这个中断。此时正在设置EXTICR寄存器。而这个寄存器是用来配置复用开关的寄存器。
290768cacf7a9f4a5.png
03小结
[color=rgba(0, 0, 0, 0.9)]MCU设置EXTICR寄存器时,即使我们不改变EXTICR中的值,在EXTICR上操作时也会使用MUX,这可能是导致出现中断无响应窗口的原因。建议客户的EXTI的初始化只在Boot中做一次就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1385

主题

1669

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部