我正在使用STM NUCLEO板,设法在Linux上的PC和串行端口上的板之间建立连接。 从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 Ĵ^^“
由于我缺乏嵌入式体验,我无法理解这里的技巧是什么以及我如何从电路板上的PC接收干净的消息来解析它并正确处理。
提前感谢任何建议。