无法从 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);
退出循环。
我正在尝试从 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);
退出循环。