繁体   English   中英

带字节的串行通信(0x00 问题)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM