STM32利用串口助手发送数据,实际接收后发现总要发送2-3次才能刷新数据,并且数据位修改后第一次发送会出现乱码希望能指导一下如何修改

接收一段报文
有报头0x81
数据长度0x01或0x02
指令名0x9?
数据 1~2位
bcc验证 1位


void USART1_IRQHandler(void) //串口中断服务函数
 { 
static uint8_t RxState = 0;//状态步 
static uint8_t count = 0;//接收计数
 if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
 {
 uint8_t RxData = USART_ReceiveData(USART1);
 if (RxState == 0)
 {
   if (RxData == 0x81)
   {
   RxState = 1; count = 0; 
  } 
  else
   { 
  RxState = 0;
   }
 } 
else if (RxState == 1)
 {
 Serial_Length = RxData; RxState = 2; 
} 
else if (RxState == 2) 
{ 
Serial_RxPacket[count] = RxData; count++;
   if(count == Serial_Length)
   { 
  RxState = 3; 
  } 
} 
else if (RxState == 3) 
{ 
Serial_RxPacket[count] = RxData; count++;
   if(count > Serial_Length) 
  { 
  RxState = 0; Serial_RxFlag = 1;
   } 
} 
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
 } 
}
 

主循环里一直通过OLED显示数据位的2个数
接收的是16进制,显示10进制

while (1)
    {
        if (Serial_GetRxFlag() == 1)
        {
               if(Serial_Length == 0x02)
            {
                OLED_ShowNum(1, 10,Serial_RxPacket[2], 4);
                OLED_ShowNum(2, 10,Serial_RxPacket[1], 4);
                          }
                 }
          }

利用串口助手发送数据,实际接收后发现总要发送2-3次才能刷新数据,并且数据位修改后第一次发送会出现乱码
希望能指导一下如何修改

排查问题分两步走。第一先排查串口,你改个程序,串口调试助手发送数据,32收到数据后立马回发,验证下你串口收发程序和硬件。如果这样都有问题,你用示波器打下串口转换芯片靠32这测的收发看数据是否正常。排除虚焊可能。 硬件没问题就看看你的串口收发程序,你用库应该问题不大。 最后单独看看你显示程序是否有异常。按这个思路排查!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: STC51 单片机+1.3“ IIC SH1106基本图形功能显示示例中的 🌿基于51单片机,在OLED原厂家提供的驱动程序中添加上基本的画点和画线的绘图函数,方便工程可移植性和扩展性。其他复杂图形的开发可以在此基础上完成。由于51单片机容量的局限,让工程尽可能多的兼容能在小容量单片机当中运行,没有往工程里面补充更多的绘图函数,如有需求在硬件资源允许的条件下,可以自行在里面根据基本的点、线进行构建。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^