Linux编程 关于串口通讯编程的几个问题

编者按:看《鸟哥的Linux私房菜》,说记录问题和解决方案是个特别好的习惯。好哦,在学习串口编程的时候遇到了许多问题也查了一些资料,有的解决了有的还没有,有的明白了有的还没有。在这里做一个记录。

学习参考资料:
慕课课程:嵌入式Linux应用与开发实践(国家精品(平震宇 、刘丽 、许常青 、匡亮 、凌路 、李涛
https://www.icourse163.org/learn/JSIT-1001754045?tid=1450235453#/learn/content?type=detail&id=1214366486&cid=1218053142
「WuYuJun's blog」的原创文章:Linux串口编程
https://blog.csdn.net/caijiwyj/article/details/90314312

1 不知如何设置虚拟串口

这个问题说来也十分沙雕,在读和写程序中我用的是同一个串口,以为就是对同一个文件进行读写而已,结果一直写不进东西,自然也读不到。而且我完全没有意识到我的虚拟机根本就没有虚拟串口可以使用。

参考文章:
利用linux虚拟机进行串口通信模拟
VMWARE虚拟机串口添加与调试

说一下,串口其实是一个硬件设备,只不过Linux中“万物皆文件”,所以对文件(ttySx)的读写就是对串口的读写,但这个设备文件它又不是普普通通简简单单的文件,实质上它是和硬件设备一样的,所以没有硬件设备的时候,看到的文件就是个空壳子而已,对它怎么写和读都是没有用的。所以根据上面两篇文章设置好两个虚拟串口,就可以在虚拟机中实现两个串口的通信。

“测试是否连通:以root权限,在一个终端中运行cat /dev/ttyS1,在另一个终端中运行echo
1234>/dev/ttyS2,如果在第一个终端中收到1234,则表明已经连通!!”

说一下对上面这句话的理解:
cat相当于对串口的读,就是打开设备文件/dev/ttyS1看里面的东西;
echo就是写,> 即重定向,把1234写到/dev/ttyS2中
串口ttyS2将数据发送到/dev/ttyS1中,就可以在/dev/ttyS1里面看到 1234
串口编程读写端的原理也不过大致如此。

2 串口发送正常,但是接收不到数据

参考文章:
linux下串口通信打开正常,发送正常,但是接收不到数据的解决办法
关于嵌入式linux下的串口通讯问题—回车、换行、缓冲

“发现是串口配置一般在正规模式(.c_lflag =ICANON)下,因此数据读取到时一直存放在缓冲区,read()进行读取时只有识别到"回车"或者“换行”符号的时候,才会从缓冲区读取成功。”

重点如上,大致的原因就是发送端发送的数据一直放在缓存里面,可是读端必须读到回车或者换行的时候才会将数据中读取出来。

这里我在写程序中的buf数据加上\n后,读端能够读到数据,但却会连续读两次(即写一次读了两次),第一次读到的是正确的数据,第二次读出了换行。具体情形如下图,这个问题暂时还想不明白,先放在这里【2020.7.21】

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值