使用 PySerial 读取空字节

Reading a null byte with PySerial

我将 adc 值从 PIC(微控制器)通过 com 端口发送到我的 PC。我使用 PySerial 读取数据。但是当我尝试读取空字节时遇到问题,它不起作用。

if self.serial_com.inWaiting():
    val = self.serial_com.read()
else:
    print "no data"

当我发送一个空字节(0x00)时,他总是显示"no data"所以我读不到一个空字节,为什么?我猜空字节不是数据?

我在 Windows

上使用 Python 2.7.9 和 PySerial 2.7

来自PySerial documentation

The port is set up for binary transmission. No NULL byte stripping, CR-LF translation etc. (which are many times enabled for POSIX.) This makes this module universally useful.

我会检查另一端的传输例程。您使用的是字符串发送例程吗? (在这种情况下,例程在 null 之前停止。您必须使用对特殊值透明的逐字符发送例程。例如 write 如果您在 C 中工作)

感谢 jcoppens 的回答, 从微控制器发送值(在 C 中):首先我将我的 adc 值分成 2 个字节(因为它是 16 位值),例如:

short int Value = 512;
char value_tab[2];
char* ConvertValue = value_tab;
*ConvertValue++ = Value & 0x00ff; // lower byte
*ConvertValue++ = ((Value & 0xff00) >> 8); // upper byte

然后我发送 value_tab 和 Microchip 提供的函数( putUSBUSART(char *data, BYTE length) 和 CDCTxService() )。你可以在这里看到这些功能:description code

我试图用rs232终端发送一个空字节,它显示了一些东西,所以我不知道为什么pyserial无法读取它。