QT串口通信原理加实例

串口通信原理:

一、串口通信的基本原理 串口的本质功能是作为 CPU 和串行设备间的编码转换器。当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的位(bit);在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。典型地,串口用于 ASCII 码字符的传输。通信使用3根线完成:地线,发送数据线,接收数据线。 串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:

(1)波特率是一个衡量通信速度的参数,它表示每秒钟传送的 bit 的个数;

(2)数据位是衡量通信中实际数据位的参数,当计算机发送一个信息包,标准的值是 5,7 和 8 位。如何设置取决于你的需求;

(3)停止位用于表示单个包的最后一位,典型的值为 1,1.5和 2 位,停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会;

(4)奇偶校验位是串口通信中一种简单的检错方式,有四种检错方式——偶、奇、高和低,也可以没有校验位。 ————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:C++串口通信-CSDN博客

处理器和外部设备通信的两种方式 1. 并行通信 2.串行通信 ‘

串行通信的通信方式有两种 1.同步通信 2.异步通信

同步:带时钟的同步信号的数据传输 在同一时钟控制下传输数据

异步:不带时钟同步信号的数据传输,使用各自的时钟发送和传输数据

串行通信的传输方向:

单工 数据只能沿着一个方向传输

半双工 数据可以沿着两个方向传输。但是需要分时进行 你搞完我搞

全双工 数据可以同时进行双向传输 两根数据线呢

实例:

新建一个类    class  COMCommunication :public QObject, virtual public EthernetDevice

类头文件中定义一个智能指针        std::shared_ptr<QSerialPort> socket;

QSerialPort是QT用于串口通信的类

新建一个class QComSet : public  QDialog用来设置参数

点击按钮设置参数

设置完参数调用COMCommunication中定义的Open函数

包括校验位,数据率,波特率,停止位等。

socket调用QSerialPort的函数进行参数设置

打开参数文件或者读取常量参数,这里有一个参数类,封装常量,上面comParam就是下面的类的对象。

从变量中获取参数

open连接成功后调用socket->write写入串口设备,使用readALL函数读取串口设备返回的数据,在readALL之前,使用socket->byteAvailable来判断缓冲区是否有残留数据,如果有的话线readALL清除缓冲数据。

这里使用了一个connect信号与槽,当socket对象发出返回信号的信号,readyread执行read_Data函数,读取返回来的数据。

这里使用connect有一个好处就是,如果他数据是一位一位发或是怎么样,只要有返回数据,就可以自动触发槽函数,一般来说会有停止符号,可以用停止符号进行判断。

PS:在vml继承设备类,重写几个虚函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值