如何样正确读取串口数据发过来的数据,并转成数据

如果在linux下,记得使用root权限,可以用root权限打开可执 行文件,或者用root权限打开Qt Creator。(原因是串口常常需要特权,有些串口有特权也只能度而不能写,这个可能是Qt本身的问题)【至于安卓端,其实没试过。】【用root打开 Qt Creator似乎是一个一劳永逸的方法,这样每次运行都以root权限,但是一些配置文件也会被改变为root权限。下一次再以普通权限打开Qt Creator就会提示错误,需要输入这样命令 sudo chmod 777 `find 对应目录`,这样能将目录的每个文件去掉权限限制】

先建立Qt Widgets Application,只要注意尽量不用中文路径即可,一直下一步,直到完成。

接着修改“项目名.pro”文件,增加这一单独行。(这个项目文件可以根据需要裁剪和增加,以增快编译效率和设置选项,而这一行表示“我想用到串口”)

进入mainwindow.ui,给它一个Combo Box(用于选择哪一个串口,一台电脑常常有多个串口)、一个label(用于显示串口是否正常)、一个Text Edit(用于接收数据)、一个lineEdit(用于发送数据)、一个Push Button(当按下一次,就发送一次),这里为了方便读者理解,与博文统一,请读者先别急着修改它们的ObeectName,至于布局,请随意。

给Combo Box一个槽,来改变串口(右键,转到槽,选择currentIndexChange(QString))。//当改变选择的选项则触发,可得到选项名

给Push Button一个槽,用于发送(右键,选择槽,选择第一个函数)。//当按下触发


加入头文件:(这里QSerialPort是必须的,而QSerialPortInfo是可选的,它能提供本机可用串口列表(列表的每一个元素都自动获取了对应的端口号、波特率、校验位等信息!),如果不使用它则需要手动编码,设置对应的串口、波特率等信息,最后完成之后单独拿出来讲,见下面的黄色阴影字体部分)

接着,给它一个private变量(表示串口及其操作函数)、一个private函数(用于初始化)、一个连接槽,(用于接收串口过来的数据,发送是不需要槽的,原因是发送是主动、随时的,而接收是被动、等待的):


接下来补齐这些没有函数体为空的函数,为了方便可以直接复制(仔细浏览,看看它们已经定义了没有,或者是否ui触发的槽选择错误,如果有问题,请投诉):

,见下面橙色阴影字体),这个选项之后是其他的串口的端口号作为选项。

当每次combo Box选项变化,将触发下面的函数:

arg1为该选择的Combo Box选项名称(第一次触发为“串口”,之后被用户选择为需要的串口号,根据上面的addItem函数可以逆推)

根据arg1查找可用的串口列表,如果找不到(例如arg1为“串口”这个字符串,当然找不到)则提示“[出错]”,否则打开并提示"[已开启]"。

这里serial先关后开,防止先前的串口忘了关闭(因为每改变一次选项就要开启一次,那么当然要把上一次的串口给关了才行)。

下面两个函数便不详述:

好已经完成全部工作,测试一下吧。

补充一下自己摸索的其他方法,作为阅读即可:

问题1:如何去掉QSerialPortInfo头文件,并手动设置串口信息,这里举个例子:

  1. //注意这里serial是指针形式,而且下面的顺序有一定要求:  
  2. //下面这些设置都是针对单片机11.0592的晶振的,请根据具体情况设置:  

问题2:如何解决传接收断断续续的问题(在某些情况串口无意地经常把一条数据拆成多条数据,这时候多次触发了serialRead槽,得到不想要的结果):

1.对于固定长度的数据,假如有数据长度不正确,就请求重发。

2.对于不固定长度的,可以在数据后面加上特殊符号作为识别,这里将举例(当特殊符号为'~')【不过这个代码没考虑多线程:static变量存在着】:

加载中,请稍候......

在工程师们的设计法宝中, USB转串口是必不可少的一个重要法宝,USB可以方便与PC进行连接,可以监控产品的工作状态,与PC交互等等许多功能,那么在实际应用中,我们还需要其他的接口,比如I2C,本文为大家介绍工程师另外一个重要法宝:USB转I2C/SMBUS。

是 推出的一块可以实现USB转I2C/SMBUS的方案,它的优势有:

·集成 USB 收发器;无需外部电阻或晶体

·GPIO 可配置为输入 / 输出和开路漏极 / 推拉式

·集成的 194 字节一次性可编程 ROM,用于存储可定制的产品信息

·片上稳压器:3.45 V 输出

·用于快速应用程序开发的 API

下面开始实现USB转I2C像串口助手一样进行数据读写教程:

  1. 拿到一块CP2112开发板或者自己设计的CP2112板子,

   选择需要发送的从地址,并填写发送的数据:

我要回帖

更多关于 读取串口数据 的文章

 

随机推荐