北哥10086 2024-02-08 18:46 采纳率: 0%
浏览 76
已结题

嵌入式蓝桥杯第二串口收发消息问题

为什么同样的程序代码,分别用cubemx的UART1使能和UART2使能,结果STM32G431Rbt6在UART1使能的时候可以正常收发串口消息,但是在UART2使能的时候不能接收也不能发送串口消息呢?(一定要用UART2是因为题目要求,之前进行通讯都用的UART1)

img

img

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-08 18:48
    关注

    引自免费微信小程序:皆我百晓生

    针对您的问题,STM32在使用不同串口时出现收发异常的情况,可能涉及以下几个原因:

    1. 硬件配置不正确

      • 确保UART2的TX/RX引脚已经正确映射并在电路设计上连接到相应的通信设备(如PC、另一块开发板或传感器等)。
      • 检查STM32G431RBT6芯片手册以确认UART2对应的GPIO是否需要额外的配置,例如上拉/下拉电阻、开漏输出等。
    2. CubeMX配置差异

      • 在CubeMX中检查UART2的配置是否与UART1一致,包括波特率、数据位数、停止位、奇偶校验位以及流控制设置等。
      • 确认UART2的 NVIC中断优先级和抢占优先级设置无误,并且已使能接收和发送中断。
    3. 代码实现部分

      • 虽然您提到是同样的程序代码,但请仔细核对针对UART2的初始化函数和收发消息函数是否有针对性的改动。确保所有关于UART2的操作都指向正确的端口句柄。

    为了更好地定位问题,请提供UART初始化及收发消息的相关代码片段,我将尝试分析并给出示例。若需展示代码,请遵循格式要求:

    // 这里是假设的UART2初始化代码示例
    void MX_USART2_UART_Init(void)
    {
      huart2.Instance = USART2;
      huart2.Init.BaudRate = 115200;
      huart2.Init.WordLength = UART_WORDLENGTH_8B;
      huart2.Init.StopBits = UART_STOPBITS_1;
      huart2.Init.Parity = UART_PARITY_NONE;
      huart2.Init.Mode = UART_MODE_TX_RX;
      huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
      huart2.Init.OverSampling = UART_OVERSAMPLING_16;
      if (HAL_UART_Init(&huart2) != HAL_OK)
      {
        // 初始化失败处理
      }
    }
    
    // 发送消息函数示例
    void Send_USART2_Message(uint8_t *pData, uint16_t Size)
    {
      HAL_UART_Transmit(&huart2, pData, Size, HAL_MAX_DELAY);
    }
    
    // 接收消息函数示例(带中断)
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
    {
      if (UartHandle == &huart2)
      {
        // 处理接收到的数据
      }
    }
    

    再次强调,由于缺少具体的代码和硬件配置信息,上述仅为一般性指导。如果在按照以上建议排查后仍无法解决问题,请提供更多细节以便进一步分析。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月20日
  • 创建了问题 2月8日