串口通信原理:
一、串口通信的基本原理 串口的本质功能是作为 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继承设备类,重写几个虚函数