STM32
直播中

卓侨汉

9年用户 1156经验值
擅长:MEMS/传感技术
私信 关注
[问答]

STM32G030不能再次进入串口中断的原因?

在使用串口时  数据发送完毕 将串口设置为外部中断,然后MCU进入停止模式。在触发外部唤醒后,进入外部触发中断 ,再次初始化串口后,再接收串口数据时,不能再次进入串口中断。这是什么原因。
串口初始化
MX_USART2_UART_Init();
HAL_UART_Receive_IT( huart2, (uint8_t *) aRxBuffer, 1);//串口中断
......数据发送接收完成
MX_GPIOA3_INIT();// 串口RX 重新配置为中断引脚
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI); //进入低功耗STOP模式
SystemClock_Config();
MX_USART2_UART_Init();
__HAL_UART_ENABLE( huart2);//串口中断使能
...... 后续串口不能产生中断



回帖(1)

石玉兰

2024-5-18 17:29:50
STM32G030不能再次进入串口中断的原因可能有以下几点:

1. 中断优先级设置问题:请检查是否正确设置了中断优先级。如果中断优先级设置不正确,可能会导致某些中断被忽略。

2. 中断使能问题:确保在进入停止模式之前,已经使能了串口接收中断。可以使用以下代码使能中断:
   ```
   __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
   ```

3. 外部中断配置问题:在进入停止模式之前,确保已经正确配置了外部中断。检查外部中断的触发方式、优先级等设置。

4. 唤醒源问题:在进入停止模式时,确保选择了正确的唤醒源。在您的代码中,使用了`PWR_SLEEPENTRY_WFI`作为唤醒源,这表示使用WFI指令进入停止模式。请确保外部中断可以唤醒MCU。

5. 串口初始化问题:在唤醒后,您重新初始化了串口。请确保在重新初始化串口时,所有相关的配置(如波特率、字长、停止位等)都与之前相同。

6. 中断服务函数问题:检查中断服务函数是否有错误或死循环,这可能导致中断服务函数无法正确执行。

7. 硬件问题:如果以上原因都排除了,可能是硬件问题。检查硬件连接是否正确,以及是否有其他硬件故障。

建议您按照以下步骤进行排查:

1. 检查中断优先级设置是否正确。
2. 确保在进入停止模式之前使能了串口接收中断。
3. 检查外部中断配置是否正确。
4. 确保选择了正确的唤醒源。
5. 检查串口初始化是否正确。
6. 检查中断服务函数是否有错误或死循环。
7. 如果以上步骤都无法解决问题,检查硬件连接和硬件故障。

希望以上信息能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分