在rsetup中开启了UART0 UART2-M0 UART3-M1,同样的应用代码,UART3-M1无法使用 不知道什么原因:
报错:get serial options error : Input/output error
get serial options error 为我自己定义的
代码如下
#define SERIAL_PORT “/dev/ttyS3”
#define BAUD_RATE B115200 // 波特率 115200,可以根据需要调整
int uart_init()
{
int serial_fd;
struct termios options;
char read_buffer[1024]; // 用于存储从串口读取的数据
int bytes_read;
// 打开串口
serial_fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY | O_NDELAY);
if (serial_fd == -1) {
perror("open serial error\n");
return -1;
}
// 获取串口的当前配置
if (tcgetattr(serial_fd, &options) < 0) {
perror("get serial options error\n");
close(serial_fd);
return -1;
}
// 设置串口波特率
cfsetispeed(&options, BAUD_RATE); // 输入波特率
cfsetospeed(&options, BAUD_RATE); // 输出波特率
// 设置数据位、停止位和奇偶校验
options.c_cflag &= ~PARENB; // 无奇偶校验
options.c_cflag &= ~CSTOPB; // 1 个停止位
options.c_cflag &= ~CSIZE; // 清除数据位设置
options.c_cflag |= CS8; // 8 个数据位
options.c_cflag &= ~CRTSCTS; // 禁用硬件流控制
options.c_cflag |= CREAD | CLOCAL; // 启用接收功能并且忽略调制解调器控制线路
// 设置新配置
if (tcsetattr(serial_fd, TCSANOW, &options) < 0) {
perror("set serial error\n");
close(serial_fd);
return -1;
}
printf("wait serial......\n");
// 设置串口为非阻塞模式
fcntl(serial_fd, F_SETFL, FNDELAY);
// 循环读取数据
while (1) {
bytes_read = read(serial_fd, read_buffer, sizeof(read_buffer) - 1);
if (bytes_read > 0) {
// read_buffer[bytes_read] = '\0'; // 添加字符串结束符
printf("%s", read_buffer);
memset(read_buffer,0x00,sizeof(read_buffer));
}
}
// 关闭串口
close(serial_fd);
return 0;
}