最近编一个串口通信的程序,运行程序后在minicom中没有显示任何的传输数据迹象。程序的功能是当向下位机发送一个字符“0x0d”后,下位机自动回复,当缓存区再次接收到“0x0d”后在终端显示,哪位师兄师姐能指点我这个小师弟一下。串口参数是:比特率19200,数据位8,奇偶校验位无,无数据流,停止位1.程序如下:
#include
#include
#include
#include
#include
#include
#include
#include
#define DEVICE_TTYS "/dev/ttyS0"
void init_ttyS(int fd)
{
struct termios options;
bzero(&options,sizeof(options));
cfsetispeed(&options,B19200);
cfsetospeed(&options,B19200);
options.c_cflag |=(-CRTSCTS|CS8|CLOCAL|CREAD);
options.c_iflag=IGNPAR;
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&options);
}
void Link_test(void)
{
int fd;
int a=0;
int nread;
char c=13;
char buff1[1];
buff1[0]=c;
char buff[512];
write(fd,buff1,1);
do{nread=read(fd,buff,512);}
while(buff[nread+1]!=c);
printf("\n%s",buff);
}
int main(void)
{
int fd;
fd=open(DEVICE_TTYS,O_RDWR);
if(fd==-1)
{
printf("open device %s error\n",DEVICE_TTYS);
}
else
{
init_ttyS(fd);
Link_test();
}
你用的是什么芯片
我以前用186的时候用的是COM0,
使用的是查询方式,但是在使用的时候一定要关COM的中断不然发送或接收就会触发死掉
最好看看你使用的串口中间件搞清楚了再用
你是在Linux下开发吧?
现在碰到什么问题?估计是无法看到0x0d显示吧。
那就要判断无法发送?无法接收?接收了无法显示?
恩,是在linux下开发,出现的问题也是这些,高手指点一下吧
write(fd,buff1,1);
do{nread=read(fd,buff,512);}
这里面的fd哪里来的?main当中的fd是main的局部变量,在test中可没法用的。要么传递指针,要么定义成全局变量。
这样编译器都不报错?
知道定义了,但已经不是main里面那个fd=open(DEVICE_TTYS,O_RDWR); 了。
fd在Link_test里面只是个普通的局部变量,你这样读写无法实际映射到串口里去。
如果有时间,建议先去翻看一下C语言的变量作用域(生存范围),以及函数的参数传递。