关于linux下串口通讯中回车的问题.

super_max 2009-07-30 03:50:51
我有如下问题请各位LINUX高手指教:

我的程序是跑在linux下的串口通讯程序,通讯一方是我的LINUX程序,另一方是个单片机.
他给我发送数据的时候现在我必须让他在数据的末尾再另加发一个回车的ASIC码我才能收到,否则收不到,这是怎么回事情啊?
...全文
978 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lddnqx 2012-06-01
  • 打赏
  • 举报
回复
不知道楼主的问题解决了吗 我也遇到这种情况 求指教
asd159357321 2011-09-16
  • 打赏
  • 举报
回复
楼主 我也想在Linux下编写一个可以与单片机通信的程序 请问你是只用C编的 还是用QT什么的编写的串口通信程序啊?
yefenglulu 2009-10-20
  • 打赏
  • 举报
回复
设置原始模式可以通过cfmakeraw函数,同时可以添加超时和读取最小字符的设置。
super_max 2009-08-10
  • 打赏
  • 举报
回复
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_oflag &= ~OPOST;
接受程序设置了,还是那样.

应该不是发送方的问题.因为我用另外一个linux系统发送也是这样,发送完了必须发送个回车.
这边才接到.
piedgogo 2009-08-06
  • 打赏
  • 举报
回复
恩,应该是你的发送程序设计要求的?

你linux是接收数据的?那看有没有回车应该去看单片机程序啊。
w0911h 2009-08-06
  • 打赏
  • 举报
回复
设置原始通信模式,串口不对接收到的数据进行处理而直接返回
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_oflag &= ~OPOST;
super_max 2009-08-06
  • 打赏
  • 举报
回复
while(1)
{
nread = read(fd, buff, 127);
while((nread>0))
{
buff[nread]='\0';
printf("%s",buff);
nread = 0;
}
}
}

这个是我的读串口程序,我没加任何判断,只要读到了就显示.可如果对方不发送回车我这边就怎么也显示不出来.无论对方之前发了多少东西,只要最后发个回车,前面发的就会全部显示出来.
mississipii 2009-08-06
  • 打赏
  • 举报
回复
首先要有一个协议,如果协议里没有回车就不用了,直接进行收发,还有就是可以的话在协议里增加一个报文长度,这样也很好判断结束.
想想也不对呀,怎么会让对方加结束符你才能收到,你是怎么判断一帧数据结束的?查检一下
super_max 2009-08-05
  • 打赏
  • 举报
回复 1
查了查资料,好象是说需要设置为原始模式.可究竟怎么设置为原始模式,总也没个统一的说法.高手们谁有这方面经验啊?
pottichu 2009-07-30
  • 打赏
  • 举报
回复
检查一下 单片机程序,是不是有缓冲机制?
ShowMan 2009-07-30
  • 打赏
  • 举报
回复
设计用回车做发送标志吧。

23,207

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧