ttys0作为串口控制台,使用正常,应用程序调用ttyS0也正常, ttyS1\ttyS2应用程序打开正常,发数据没反应
下面是直接通过控制台发数据的测试,
ttyS1\ttyS2,接上CH340插上电脑,发送数据以后没任何反应,收不到任何数据,但是不报错,
ttyS0控制台发送数据以后,可以直接看到数据,发送成功!
ttyS3因为不存在,直接打开错误, ttyS1\ttyS2没报错,说明DTS配置没问题。
倒腾了一天没找到问题,希望各位大神不吝赐教,万分感谢!
# echo uart-test > /dev/ttyS1
# echo uart-test > /dev/ttyS2
# echo uart-test > /dev/ttyS0
uart-test
# echo uart-test > /dev/ttyS3
sh: write error: I/O error
这是配置以后的suniv.dtsi
uart0_pins_a: uart0 {
pins = "PE0", "PE1";
function = "uart0";
bias-pull-up;
};
uart1_pins_a: uart1 {
pins = "PA2", "PA3";
function = "uart1";
bias-pull-up;
};
uart2_pins_a: uart2 {
pins = "PE7", "PE8";
function = "uart2";
bias-pull-up;
};
这是配置以后的suniv-f1c100s-licheepi-nano.dts
&uart0 {
pinctrl-names = "default";
pinctrl-0 = ;
status = "okay";
};
&uart1 {
pinctrl-names = "default";
pinctrl-1 = ;
status = "okay";
};
&uart2 {
pinctrl-names = "default";
pinctrl-2 = ;
status = "okay";
};
这是测试的应用程序,就做了简单的打开串口,发送数据
#include
int fd;
int uart_init()
{
fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY);
struct termios oldtio = { 0 };
struct termios newtio = { 0 };
tcgetattr(fd, &oldtio);
//设置波特率为115200
newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
newtio.c_iflag = 0; // IGNPAR | ICRNL
newtio.c_oflag = 0;
newtio.c_lflag = 0; // ICANON
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;
tcflush(fd, TCIOFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
//设置为非阻塞模式,这个在读串口的时候会用到
fcntl(fd, F_SETFL, O_NONBLOCK);
return fd;
}
/* 功能:uart_send 串口数据发送函数
* 参数:无
* 返回值:int:-1 失败
* 备注:---
*/
int uart_send(void)
{
uint8_t buffer[4] = {0};
buffer[0] = 'T';
buffer[1] = 'X';
buffer[2] = '\n';
buffer[3] = '\n';
int ret = write(fd, buffer, sizeof(buffer));
return ret;
}