使用C的串行通信错误

Error in serial communication using C

我正在尝试在 raspberry pi 和我的 windows PC 之间建立串行通信。 在我的树莓派中,我是 运行 一个从串行端口读取的 C 代码。两部分之间的通信已建立,我可以接收数据,但问题是接收到的数据包与发送的数据包不同。例如,如果我从我的计算机发送 0xAA,我会在 Raspberry 端收到类似 0x6FFFFFAA 之类的东西。我不知道这个 6FFFFF 是从哪里来的??它甚至与其他数据包一起重复!感谢您的帮助。

根据您的评论,您正在这样做:

unsigned int x;
...
read(port, &x,1);

这行不通,因为您正在读取一个字节,但 int 在大多数系统上至少是 2 或 4 个字节。因此 int 的一个字节包含您想要的值,但其余字节包含垃圾。

如果您一次读取一个字节的数据,您应该将 x 声明为一个 unsigned char,即一个字节。

如果您想一次读取两个或更多字节,您需要定义一个字符数组来读入:

char buffer[size];
int count, i;

count = read(port, buffer, size);
if (count == -1) {
    perror("read failed");
    exit(1);
}
for (i=0;i<count;i++) {
    // process buffer[i]
}

unsigned int 大于大小 1,您将其作为要读取的字节数作为 read 的参数。因此只有一个字节被读入unsigned int,其余的基本上是未初始化或剩余的数据。读到unsigned char,即

unsigned char x;
read(port, &x, 1);

您仍然可以像以前一样使用 printf 打印它。