关于串口通讯每次只能接收8个字节
来源:互联网 发布:淘宝秒单软件 编辑:程序博客网 时间:2024/06/03 13:29
这两天在某嵌入式系统做了个串口通讯程序,遇到了每次只接收8个字节的问题。相信很多人都遇到了。
上网一查资料,找到串口配置结构体struct termios中的c_cc[VTIME] 和 c_cc[VMIN]参数。
c_cc[VTIME] // 等待时间,单位百毫秒
c_cc[VMIN] // 最小字节数
VMIN自然就是最少接收的字节数了。那不足VMIN的话怎么办呢? VTIME就是经过这么多个百毫秒后,即使不足VMIN定义的最少字节数,也读出。
当VTIME=0,就是一直等待。当然,串口需要设置成阻塞模式。
好,试一下:
程序中 read(fd, buf, 40); // 伪代码
c_cc[VTIME] = 1;
c_cc[VMIN] = 10;
用串口工具发送字符串“1234567890123456789”
结果分为两次接收
“1234567890123456”
“789”
不是8个字节了,变成了16个字节。
看来,最少接收字节数会被设定为大于VMIN参数的那个8的倍数。
为了测试接收延时,在程序中加入了毫秒级的时间打印信息,然后测试接收长字符串 “123456789012345678901234567890123456789”。
结果接收分成了3条。第一第二条之间的时间间隔约25毫秒,可能是我的其他代码占用了些时间。
第二第三条之间间隔100毫秒。因为第三条不足16个字节,所以等待到VTIME时间才会被读到。
另外测试得出:当VMIN大于read的第三个参数时,以read的第三个参数为准。
总结:
1、嵌入式系统的默认串口缓冲是8个字节,可被配成8的倍数。最大值未验证。
2、VTIME的单位是“百毫秒”,即最小等待100毫秒。对实时性要求较高的场合太长了。
3、为了保证数据接收完整性,串口通讯协议还是应该做的。
- 关于串口通讯每次只能接收8个字节
- MT7688 串口调整每次接收数据的字节数
- 关于STM32串口第一个字节丢失
- STM32移植RT-Thread的串口只能接收一个字节数据的问题
- MSP430G2553串口通讯 发送接收
- STM32 串口通讯 发送 接收
- 关于串口通讯
- C#串口通讯 接收数据问题
- 异步串口通讯第一次接收数据错误
- 嵌入式通讯中串口接收出错
- 51单片机串口通讯接收一串字符串
- 51单片机串口通讯接收一串字符串
- vb API 串口通讯(串口配置、接收、发送数据)
- 关于SCO Unix 串口通讯
- 关于Android串口通讯总结
- 关于C#串口通讯问题!
- 接收串口字节数组时,高低字节位转UInt16,
- 为何我的串口只能接收一个字符?
- React * Ref回调函数处理
- Android使用微信H5支付
- CCF201503-2 数字排序——又是一个小错误
- [FAQ13878][Audio APP]收音机 APP 添加耳机hook键,以实现播放、暂停的功能
- HTML5 与 CSS3 新特性
- 关于串口通讯每次只能接收8个字节
- Linux账户管理
- CentOS 7 yum nginx MySQL PHP 简易环境搭建
- 团队中的 Node.js 具体实践
- jqgrid 触发行点击事件
- tomcat 高版本 加载MANIFEST.MF 中 class-path 问题
- 解决tomcat启动内存不足的问题
- Selenium IDE安装与介绍
- hdu3533bfs+预处理