我正在使用STM NUCLEO板,设法在Linux上的PC和串行端口上的板之间 Build 连接 . 从PC我发送以下消息:

write( hSerial, "check\n\r", 7 );

启动线程,侦听端口并将所有消息写入终端:

void* thread2(void *v) 
{
   char chArrBuf [256];
   char chArrBuf2 [256];
   int n;
   memset (&chArrBuf , '\0', sizeof(chArrBuf) );
   while (1) {    
      n = read( hSerial, &chArrBuf , 1 ); 

      if (n>0) printf("%s", chArrBuf);
   }
   return 0;
}

对于我正在使用System Workbench和HAL库的电路板:

HAL_UART_Transmit( &hUART2, "EVENT:JOY_DOWN\r\n", 16 , 0xFFFF);

(例如,当操纵杆向下移动时这样的消息)消息被接收并在终端中正确显示

但当我试图从PC上读取消息到板上的缓冲区时,我可以在PC上的终端中看到许多无用的符号 . 代码如下:

i = 0;
oRecvStatus = HAL_UART_Receive( &hUART2, chArr, 50, 100 );
if( oRecvStatus == HAL_OK )
{
    while((chArr[i]!="\n")&&(chArr[i-1]!="\r")){
        Buffer[i] = chArr[i];
        i++;
    }
    Buffer[i+1] = "\n";
} 
HAL_UART_Transmit( &hUART2, Buffer, strlen(Buffer) , 0xFFFF);

在PC上的终端显示“^^ J ^ JJ ^^^ Jcheck”,经过几次迭代并在终端上显示来自电路板的消息,消息正在改变如下:“^ ck ^ JJ ^^^ JJJeck J ^^”

由于我缺乏嵌入式经验,我无法理解这里的技巧是什么,以及如何从板上的PC接收干净的消息来解析它并正确处理 .

提前感谢任何建议 .