无法从 UART 端口读取,Beaglebone Black

Cannot read from UART port, Beaglebone Black

我正在尝试从 Beaglebone Black 的 UART1 读取数据。
我已经将 UART1 的 TX 连接到 UART1 的 RX
我在屏幕上打印了未知字符。
我正在从 Minicom ttyO1 终端

输入字符

我的代码是这样的。


#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<termios.h>   // using the termios.h library

int main(){
   int file;
   file = open("/dev/ttyO1", O_RDWR | O_NOCTTY | O_NDELAY);

      struct termios options;               //The termios structure is vital
      tcgetattr(file, &options);            //Sets the parameters associated with file
      options.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
      options.c_iflag = IGNPAR | ICRNL;    //ignore partity errors, CR -> newline
      tcflush(file, TCIFLUSH);             //discard file information not transmitted
      tcsetattr(file, TCSANOW, &options);  //changes occur immmediately

      unsigned char recieve[100];  //the string to send
while(1) {
      read(file, (void*)recieve,100);       //send the string
      sleep(2);
      printf("%s ", recieve);
      fflush(stdout);
      close(file);

}
       return 0;
}

由于你用O_NDELAY选项初始化UART,read立即returns,printf打印未初始化数组的内容,即垃圾.

读取串行线有点棘手。至少,检查 read return 值,并以 0 终止已读取的内容(请记住,printf 期望数据以 0 终止,而 read 确实 添加终止符),按照

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

除此之外,您不得读取已关闭的文件。将 close(file); 退出循环。