You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F030xx系列MCU UART中断无法接收数据求助

STM32F030xx UART接收中断无响应问题排查

我在STM32F030xx系列MCU上使用UART中断功能,已通过STM32CubeIDE完成UART初始化并开启全局中断。测试HAL_UART_Transmit功能正常,PC端串口助手能收到发送的数据;但从PC向MCU发送数据时,__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE)始终未置位,中断回调里预期回传的test_buf内容也没在串口助手显示。相关代码片段如下:

extern unsigned char usart2_rx_buf[100];
extern unsigned char usart2_rx_temporary[100];
extern unsigned char usart2_rd_len;
extern unsigned char usart2_rd_lentemp;
extern unsigned char usart2_rx_enableflag;
extern unsigned char usart2_rx_checkrightflag;
extern unsigned short usart2_executeflag;
extern unsigned short check;
extern uint8_t i, j;
extern uint16_t check_temp, res;
unsigned char test_buf[3] = {0x01, 0x02, 0x03};

extern SPI_HandleTypeDef hspi1;
extern SPI_HandleTypeDef hspi2;
extern UART_HandleTypeDef huart2;

void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
  if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) != RESET)
      {
          HAL_UART_Transmit(&huart2, test_buf, 3, HAL_MAX_DELAY);
          res = (uint8_t)(huart2.Instance->RDR & 0xFF);
//...Rest of the code

排查步骤

  • 确认UART接收中断使能:检查CubeIDE生成的初始化代码,确保已开启UART的RXNE中断(UART_IT_RXNE)。可直接查看寄存器USART2->CR1的RXNEIE位是否为1;若未开启,需在CubeMX中启用"RXNE interrupt",或手动调用__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE)。
  • 核对串口参数一致性:PC端串口助手的波特率、数据位、停止位、奇偶校验必须与MCU配置完全匹配,参数不匹配会导致接收数据异常,RXNE标志无法触发。
  • 检查硬件连接:确认USART2_RX引脚(STM32F030xx通常为PA3)与USB转串口模块的TX引脚连接牢固,模块与MCU必须共地,避免信号干扰。
  • 修正中断函数逻辑:直接重写USART2_IRQHandler时,需注意HAL库的中断处理流程。建议先调用HAL_UART_IRQHandler(&huart2),或手动清除中断标志:
    void USART2_IRQHandler(void)
    {
      /* USER CODE BEGIN USART2_IRQn 0 */
      HAL_UART_IRQHandler(&huart2); // 先执行HAL库中断处理
      if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) != RESET)
          {
              HAL_UART_Transmit(&huart2, test_buf, 3, HAL_MAX_DELAY);
              res = (uint8_t)(huart2.Instance->RDR & 0xFF);
              __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE); // 手动清除标志
    //...Rest of the code
    
    注:读取RDR寄存器会自动清除RXNE标志,但需确保时序正确,避免标志位被提前处理。
  • 排查中断优先级配置:在CubeMX的NVIC配置中,确认USART2的中断优先级(抢占/子优先级)合理,未被更高优先级中断抢占导致无法响应。
  • 轮询方式验证硬件:先禁用中断,用HAL_UART_Receive(&huart2, &res, 1, HAL_MAX_DELAY)轮询接收。若轮询能收到数据,说明硬件和参数正常,问题出在中断配置;若轮询也收不到,需排查硬件或参数配置问题。

内容的提问来源于stack exchange,提问作者Raymond Low

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:03:31