C 无法从UART端口读取,Beaglebone黑色

C 无法从UART端口读取,Beaglebone黑色,c,terminal,embedded-linux,uart,beagleboneblack,C,Terminal,Embedded Linux,Uart,Beagleboneblack,我正在尝试从Beaglebone Black的UART1读取数据。 我已将UART1的发送连接到UART1的接收 我正在屏幕上打印未知字符。 我从Minicom ttyO1终端输入字符 我的密码是这个 #包括 #包括 #包括 #包括//使用termios.h库 int main(){ int文件; 文件=打开(“/dev/ttyO1”,O|RDWR | O|NOCTTY | O|NDELAY); struct termios options;//termios结构至关重要 tcgetattr(

我正在尝试从Beaglebone Black的UART1读取数据。
我已将UART1的发送连接到UART1的接收 我正在屏幕上打印未知字符。
我从Minicom ttyO1终端输入字符

我的密码是这个


#包括
#包括
#包括
#包括//使用termios.h库
int main(){
int文件;
文件=打开(“/dev/ttyO1”,O|RDWR | O|NOCTTY | O|NDELAY);
struct termios options;//termios结构至关重要
tcgetattr(文件和选项);//设置与文件关联的参数
options.c|cflag=B9600 | CS8 | CREAD | CLOCAL;
options.c_iflag=IGNPAR | ICRNL;//忽略部分错误,CR->换行符
tcflush(文件,TCIFLUSH);//放弃未传输的文件信息
tcsetattr(文件、TCSANOW和选项);//立即发生更改
unsigned char receive[100];//要发送的字符串
而(1){
read(file,(void*)receive,100);//发送字符串
睡眠(2);
printf(“%s”,接收);
fflush(stdout);
关闭(文件);
}
返回0;
}

由于您使用
O\u NDELAY
选项初始化UART,
read
立即返回,
printf
打印未初始化数组的内容,即垃圾

读取序列行有点棘手。至少,检查
read
返回值,并0-终止已读取的内容(请记住,
printf
希望数据以0-终止,并且
read
不添加终止符),如下所示:

    int characters = read(file, (void*)recieve,100);
    if (characters == -1) {
        handle_the_error();
    }
    receive[characters] = 0;
    printf("%s", receive);
    ....

除此之外,您不得阅读已关闭的文件。取
关闭(文件)循环外。

您的termios配置有问题且不完整。您的程序及其新的修复程序今天似乎可以工作,但它不是在其他条件下可靠工作的健壮代码。请参阅,因为您使用的是非阻塞模式,所以您的程序正在低效地轮询等待数据的系统缓冲区。看见