自己写的一个简单的串口定时发送一个字符串,同时即时打印出接收到的串口信息的小程序,在开发板的串口0使用是OK的,更改/dev/ttySAC1后到了串口1运行串口就没响应了啊,后来又尝试了串口2也不行,(串口1和串口2测试的时候是额外另接一台PC的超级终端测试的),求解释啊!
程序如下:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<termios.h>
#include <string.h>
const unsigned char AT[] ="AT\n";
void set_speed(int,int);
int main()
{
int fd,flag,wr_num=0,rd_num=0,ret=0,i;
struct termios term;
fd_set fdset;
struct timeval wait_time;
speed_t baud_rate_i,baud_rate_o;
char send_buf[]="hello,serial!";
char recv_buf[20];
fd=open("/dev/ttySAC0",O_RDWR | O_NONBLOCK);
if(fd == -1)
printf("can not open the COM1!\n");
else
printf("open COM1 ok!\n");
set_speed(fd,115200);
while(1)
{
FD_ZERO(&fdset);
FD_SET(fd,&fdset);
wait_time.tv_sec = 0;
wait_time.tv_usec = 10000;
//wr_num=write(fd,send_buf,sizeof(send_buf));
wr_num=write(fd,AT,sizeof(AT));
if(wr_num>0)
printf("write success!\n");
else
printf("write fail!\n");
sleep(1);
ret = select(fd+1, &fdset, (fd_set *)NULL, (fd_set *)NULL, &wait_time);
if(ret <=0)
{
}
else
{
memset( recv_buf,0,sizeof(recv_buf) );
rd_num=read(fd,recv_buf,sizeof(recv_buf));
if(rd_num>0)
{
printf("we can read \"%s\" from the COM1.total:%d characters\n",recv_buf,rd_num);
}
else
printf("read fail!\n");
sleep(2);
}
}
}
int speed_arr[]={B38400,B19200,B9600,B4800,B2400,B1200,B300,B38400,B19200,B9600,B4800,B2400,B1200,B300,};
int name_arr[]={38400,19200,9600,4800,2400,1200,300,38400,19200,9600,4800,2400,1200,300,};
void set_speed(int fd,int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd,&Opt);
for(i=0;i<sizeof(speed_arr)/sizeof(int);i++)
{
if(speed==name_arr)
{
tcflush(fd,TCIOFLUSH);
cfsetispeed(&Opt,speed_arr);
cfsetospeed(&Opt,speed_arr);
status = tcsetattr(fd,TCSANOW,&Opt);
if(status != 0)
{
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}