appwyp 2022-12-28 15:23 采纳率: 43.8%
浏览 297
已结题

请问两快STM32F4和F7板子串口之间通信问题

Baud Rate: 9600
Word Length: 8 Bits
Parity: None
Stop Bits: 1

一块板子发送8个bytes: 1,2,3,4,5,6,7,8 但另一块板子收到了: 127, 191, 247, 245, 243, 241, 239, 0

  1. STM32F767 每隔1秒发一次8 bytes 的数据
uint8_t Tx2_Data[8] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8};
while(1)
{
     HAL_UART_Transmit(&huart2, Tx2_Data, 8, 1000);
     HAL_Delay(1000);
}
  1. STM32F429 用中断来接收数据
uint8_t Rx3_Data[8*2];
    
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    
      if (huart->Instance == USART3)
      {
          rx3_data_ready = 1;
          HAL_UART_Receive_IT(&huart3, Rx3_Data, 8);
      }
}

img

  • 写回答

8条回答 默认 最新

  • |__WhoAmI__| 2022-12-28 15:35
    关注

    你提到的两块板子之间的串口通信是基于 8N1 格式,也就是说它们使用了 8 位数据位,无奇偶校验位,1 位停止位的串口通信格式。

    数据发送方板子的代码看起来没有问题,但是接收方板子的代码中存在一些问题。

    可以先使用的是中断方式接收数据,在接收到数据时会调用 HAL_UART_RxCpltCallback 回调函数。在这个回调函数中,需要将接收到的数据处理完后再次调用 HAL_UART_Receive_IT 函数以继续接收数据。但是在代码中,只是将接收到的数据存储到了 Rx3_Data 数组中,并没有再次调用 HAL_UART_Receive_IT 函数。因此每次接收完数据后,接收方板子就不会再接收数据了。

    正确的做法应该是,在回调函数中处理完接收到的数据后,再次调用 HAL_UART_Receive_IT 函数开启串口接收中断,以便继续接收数据。

    具体来说,应该改写为如下代码:

    uint8_t Rx3_Data[8];
    
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
        if (huart->Instance == USART3)
        {
            // 在这里处理接收到的数据
            // ……
            // 处理完数据后,再次开启串口接收中断
            HAL_UART_Receive_IT(&huart3, Rx3_Data, 8);
        }
    }
    

    此外在接收方板子的代码中使用的 Rx3_Data 数组大小为 8*2=16,但是在调用 HAL_UART_Receive_IT 函数时仍然使用的是 8 位数据位。如果希望接收方板子能够正常接收到数据,应该将 Rx3_Data 数组的大小改为 8。

    如果在接收方板子中仍然无法正常接收到数据,还可以检查一下以下几点:

    1. 检查串口的波特率是否正确,确保发送方板子和接收方板子的波特率相同。

    2. 检查串口的其他参数是否正确,确保发送方板子和接收方板子的串口设置相同。

    3. 检查串口的连接是否正确,确保串口的 Tx 和 Rx 线路接在了正确的引脚上。

    4. 检查串口的硬件是否存在问题,如果串口的芯片或板子本身存在问题,也可能导致通信异常。
      望采纳。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月3日
  • 赞助了问题酬金100元 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡