1 2 | 受不了xxxx恶心人的行为,遂搬迁至博客园。 始发: 2018 - 03 - 02 15 : 42 : 00 |
一、简介
随着物联网、智能化的浪潮,加上嵌入式设备硬件资源的限制,越来越多的通信模块开始倾向于串口,比如WiFi模块、BT模块、ZigBee模块等等。 串口的特点:
1、通用。由于串口的悠久历史,就连8位机51都必含串口。
2、易用易调试。硬件上来说,Rx/Tx/GND搞定;软件上,读写串口同样相当简易。而且,由于串口的普及,我们可以极其方便的结合PC上的串口工具辅助调试。
3、稳定。
基于以上原因,在开发中经常需要调试串口通信,所以写了个小的串口通信demo。由于串口之上的协议各不相同,所以只提供基本的读写数据功能。
二、编译
如果使用qt-opensource-windows-x86-mingw491_opengl-5.4.0.exe,那么直接clone代码即可编译运行,UI如下:
三、Qt串口编程注意事项
在接收串口数据时:
1 2 3 4 5 6 7 8 9 10 11 | void PortSettingDialog::onDataRecv() { const qint64 bytesAvailable = mUartCom->bytesAvailable(); if (bytesAvailable == 0) return ; QByteArray readData = mUartCom->readAll(); const char *rxBuffer = readData.data(); updateRecvUI(rxBuffer, bytesAvailable); } |
bytesAvailable()方法的返回值bytesAvailable可能比readData.size()小,所以如果使用bytesAvailable进行数据处理的话(如上面代码段),无疑会遗漏数据,自然这是错误的。所以我们不能使用bytesAvailable()丈量数据长度,正确的串口数据接收方式:
1 2 3 4 5 6 7 8 9 | void PortSettingDialog::onDataRecv() { QByteArray readData = mUartCom->readAll(); if (readData.size() == 0) return ; const char *rxBuffer = readData.data(); updateRecvUI(rxBuffer, readData.size()); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2019-06-16 socket编程实战-bind端口占用问题
2019-06-16 socket编程实战-tcp_tw_recycle问题
2019-06-16 socket编程实战-connect超时问题