|
关于串口通讯的问题,困扰了很长时间,劳烦大家帮我看一下吧,谢谢了
[复制链接]
我现在的开发环境是在PC台式机上装了VMware虚拟机,里面运行Redhat9,在这个Linux操作系统环境下开发调试串口。
宿主机(PC台式机)只有一个串口com1,2410的开发板虽然有四个串口,但是只有一根串口线,所以我将SerialPort0(ttyS0)同宿主机的com1相连。这个ttyS0在minicom中被用作console端。
所以我现在遇到的问题是,没有办法进行串口通讯了,唯一一个同2410相连的串口被用作console了,我想使用ttyS1,ttyS2作为串口通信,但是使用read读时,总是读不到信息,大家是如何解决的?
如果不用ttyS1,ttyS2,只用ttyS0
我在网上曾经看到过几个解决方法,但都不行。
1。网上说有代码可以释放ttyS0作为普通的串口通信,如下,但是我在使用后没有效果,释放后,无法变回console了
释放ttyS0作为通信串口
#include
#include
#include
#include
#include
#include
void CloseConsole(void) {
int fp;
struct termios options;
printf("change1\n");
fp = open("/dev/tty1",O_RDONLY); // 改变console
ioctl(fp,TIOCCONS);
close(fp);
fp = open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY); //打开串口0读写
if(fp == -1) exit(0);
tcgetattr(fp,&options);
cfsetispeed(&options,B115200);
cfsetospeed(&options,B115200);
options.c_cflag |= (CLOCAL|CREAD);
tcsetattr(fp,TCSANOW,&options);
write(fp,"hello world!\n123",15);
close(fp); //关闭串口0
fp = open("/dev/tty0",O_RDONLY); //恢复console 到串口0
ioctl(fp,TIOCCONS);
close(fp);
printf("change2\n");
}
|
|