为什么rx不接收来自UART上的环回tx的数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么rx不接收来自UART上的环回tx的数据?相关的知识,希望对你有一定的参考价值。
我有a system运行Linux,将rx连接到来自UART1的tx(环回)并执行此代码:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main(void) {
int iFd = open("/dev/ttyTHS0", O_RDWR);
if (iFd < 0) {
fprintf(stdout, "Error when opening file.
");
return -1;
}
while (1) {
if (write(iFd, "A", strlen("A")) == -1) {
fprintf(stdout, "Failed to write
");
return -1;
}
char buff[10] = {
0
};
if (read(iFd, buff, sizeof(buff)) < 0) {
fprintf(stdout, "Failed to read.
");
return -1;
}
fprintf(stdout, "read: %s
", buff);
}
close(iFd);
return 0;
}
事情是它似乎没有收到任何数据。代码只是阻塞在read
。当用示波器观察时,我可以看到在tx线上传输的数据,但是rx没有收到任何信息。我也尝试在2个进程中拆分此代码,一个进程用于传输,另一个用于接收,但这也不起作用。
答案
这是合乎逻辑的。您可能不会发送任何内容,因为它位于发送缓冲区中。其他问题是您尝试接收10个字节,但只发送一个。在许多系统上,串行超时设置为不定时,您将永远等待接下来的9个字节。
怎么做(第2点有一些变种):
- 刷新UART文件
2A。只读取发送ioctl(ifd, FIONREAD, &bytes_ready_to_read);
的字节数,然后只读取可用的数字。
2C。更改超时。
以上是关于为什么rx不接收来自UART上的环回tx的数据?的主要内容,如果未能解决你的问题,请参考以下文章