为什么rx不接收来自UART上的环回tx的数据?

问题描述 投票:0回答:1

我有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.\n");
        return -1;
    }

    while (1) {
        if (write(iFd, "A", strlen("A")) == -1) {
            fprintf(stdout, "Failed to write\n");
            return -1;
        }

        char buff[10] = {
            0
        };

        if (read(iFd, buff, sizeof(buff)) < 0) {
            fprintf(stdout, "Failed to read.\n");
            return -1;
        }

        fprintf(stdout, "read: %s\n", buff);

    }
    close(iFd);

    return 0;
}

事情是它似乎没有收到任何数据。代码只是阻塞在read。当用示波器观察时,我可以看到在tx线上传输的数据,但是rx没有收到任何信息。我也尝试在2个进程中拆分此代码,一个进程用于传输,另一个用于接收,但这也不起作用。

c
1个回答
1
投票

这是合乎逻辑的。您可能不会发送任何内容,因为它位于发送缓冲区中。其他问题是您尝试接收10个字节,但只发送一个。在许多系统上,串行超时设置为不定时,您将永远等待接下来的9个字节。

怎么做(第2点有一些变种):

  1. 刷新UART文件

2A。只读取发送ioctl(ifd, FIONREAD, &bytes_ready_to_read);的字节数,然后只读取可用的数字。

2C。更改超时。

© www.soinside.com 2019 - 2024. All rights reserved.