主题 : linux下读串口数据遇到问题 复制链接 | 浏览器收藏 | 打印
大家快来回复我的帖子啊!!!
级别: 新手上路
UID: 11403
精华: 0
发帖: 49
金钱: 280 两
威望: 71 点
综合积分: 98 分
注册时间: 2009-12-06
最后登录: 2010-10-27
楼主  发表于: 2010-08-22 17:51

 linux下读串口数据遇到问题

Linux下利用串口收发数据,向串口写数据没有问题,就是读串口,总是不对,不知道问题出在哪了?大家看一下我的主程序,第一次往串口发送6个字节没问题,通过串口助手可以接受到,然后按照主从协议格式回答一个指令(也是6个字节,我利用串口助手在PC机端发送的),需要程序读出来,然后继续向下执行。要是读出来了就应该由串口发送buff25个字节的指令,可是为什么在串口助手接收端会出现[root@FriendlyARM/]#,有时 也会出现[root@FriendlyARM/]#ls  Please press enter to active this console.,我在串口设置中已经将串口作为非终端打开了,这是为什么呢?请大家给我点意见!
int main(void)
145 {
146         int fd;
147         int nwrite,sread,i;
148         unsigned char buffa[6]={0x10,0x02,0x00,0x49,0x4B,0x16};
149         unsigned char stra[6]={0x10,0x00,0x02,0x00,0x02,0x16};
150         unsigned char buff[25]={0x68,0x1D,0x68,0x02,0x00,0x7C,0x32,0x01,0x00,0x10,0x00,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x09,0x4F,0x47,0x52,0x41,0x4D,0xBD,0x16};
151         unsigned char str[6];
152         memset(str,'\0',6);
153         if((fd=open_port(fd,1))<0){
154                 perror("open_port error");
155                 return;
156         }
157         if((i=set_opt(fd,9600,8,'E',1))<0){
158                 perror("set_opt error");
159                 return;
160         }
161         nwrite=write(fd,buffa,6);  
162         tcflush(fd,TCIFLUSH);
163         if(nwrite<0)
164                 perror("write port error");
165         sread=saferead(fd,&str,6); //读串口数据,利用串口调试助手发送的
166         if(sread==6)
169                 nwrite=write(fd,buff,35);
170         else
171                 perror("连接失败!");
172         close(fd);
           }
这个saferead函数我是参考的顶嵌出的一本C语言编程书上的串口程序
int saferead(int fd,void *vptr,int nbytes)
123 {
124         int nleft;
125         int nread;
126         int *ptr=NULL;
127         ptr=vptr;
128         nleft=nbytes;
129         while(nleft>0)
130         {
131         if((nread=read(fd,ptr,nleft))<0){
132                 if(errno==EINTR)
133                         nread=0;
134                 else
135                         return -1;
136                 }else if(nread=0)
137                 break;
138         nleft-=nread;
139         ptr+=nread;
140         }
春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是UBUNTU好时节。。。。
级别: 侠客
UID: 24947
精华: 2
发帖: 63
金钱: 430 两
威望: 86 点
综合积分: 166 分
注册时间: 2010-07-16
最后登录: 2019-04-27
1楼  发表于: 2010-08-22 18:04
内核占用了该端口,换个端口试试
大家快来回复我的帖子啊!!!
级别: 新手上路
UID: 11403
精华: 0
发帖: 49
金钱: 280 两
威望: 71 点
综合积分: 98 分
注册时间: 2009-12-06
最后登录: 2010-10-27
2楼  发表于: 2010-08-22 20:15

 回 1楼(小荷尖尖) 的帖子

只有一个串口 该怎么办?我想用这个串口既作为调试信息输出口又可以用作串行通信口
大家快来回复我的帖子啊!!!
级别: 新手上路
UID: 11403
精华: 0
发帖: 49
金钱: 280 两
威望: 71 点
综合积分: 98 分
注册时间: 2009-12-06
最后登录: 2010-10-27
3楼  发表于: 2010-09-26 21:33
经过高人指点发现是内核的问题,因为这个串口在编译内核时已经被设置为调试终端,而且Linux下串口不能被独占打开,所以调试串口总会在实际操作串口前发出一些信息,后来我重新编译了一下内核,将串口1作为一般串口,这个问题就解决啦,真是很不容易啊……
事皆有因
级别: 新手上路
UID: 35986
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
综合积分: 14 分
注册时间: 2011-01-10
最后登录: 2011-03-14
4楼  发表于: 2011-01-12 08:57
vivianwei ,能请教你怎么配置串口内核的吗?我遇到同样的问题,但是没有改进的思路。
请告诉我应该看什么资料,谢谢!
我的邮箱:bearlonger@163.com
有心才能办成事
级别: 新手上路
UID: 54205
精华: 0
发帖: 49
金钱: 250 两
威望: 50 点
综合积分: 98 分
注册时间: 2011-08-26
最后登录: 2014-03-17
5楼  发表于: 2011-10-20 21:01
请问怎么传送数据在开发板串口助手上显示
正在探索micro2440开发板和MC35I的gprs连接应用问题
级别: 新手上路
UID: 55616
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2011-09-20
最后登录: 2012-02-07
6楼  发表于: 2011-11-03 10:51

 回 5楼(xulip222) 的帖子

你好,我也是遇到这个问题,那个串口助手貌似不能同时接收和和发送(linux),我把开发板com0和GPRS模块相连接,发送指令好像是正常的,但是就是没有返回的指令,您这个问题解决了吗?