[英]Serial communication with bytes (0x00 problem)
我在为 USB CDC 使用串行通信时遇到问题。 我正在研究嵌入式 STM 微控制器,我想用 pySerial 传递二进制数据。
我想直接发送二进制代码,但我被这个 0x00 阻止了。我的问题是当我想发送 0x00 字节时,下一个字节似乎被忽略了。
这是 python 脚本:
towrite = [ 0xFF, 0xx00 \xFF ]
nbSend = s.write(b'\xFF\x00\xFF')
print(nbSend) #Displaying 3 here, that means 3 bytes are successfully sended
然后嵌入脚本:
//Interrupt function that receive the data from serial com
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
char buffer[64];
sprintf(buffer,"Length=%lu / Word=%c%c%c ",(unsigned long)*Len,Buf[0],Buf[1],Buf[2]);
debugPrintln(&huart2, buffer) //Function to print on serial to debug
//Here that print "Length=3 / Word=ÿ "
return (USBD_OK);
/* USER CODE END 6 */
}
如您所见,即使接收到的字节数很好,也不考虑第二个和最后一个字符(0x00,0xFF)......有什么建议吗?
是调试不起作用,但数据传输很好。
sprintf(buffer,"Length=%lu / Word=%c%c%c ",(unsigned long)*Len,Buf[0],Buf[1],Buf[2]);
第二个%c
将一个实际的 NUL 字节放入缓冲区,因此debugPrintln
忽略它之后的所有其他内容。
对于测试,更改为:
sprintf(buffer,"Length=%lu / Word=%02X %02X %02X",(unsigned long)*Len,Buf[0],Buf[1],Buf[2]);
看看它是否显示了所有字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.