串口通信中“帧头+节点ID+数据长度+命令(因素ID)+附加数据+校验+帧尾”各部分怎么定义?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口通信中“帧头+节点ID+数据长度+命令(因素ID)+附加数据+校验+帧尾”各部分怎么定义?相关的知识,希望对你有一定的参考价值。

·串口通信中数据都是自己随意定义的,传送的都是16进制数据:设备与计算机要一致即可;
如果你是与具体已经有的某个厂商的设备通信,那么这个通信格式已经固定了,问厂商要通信格式说明书。
如: 枕头:55
节点ID:03
。。。
交验:一般为所有数据的校验和

帧尾:也是自定义的
参考技术A 都是根据实际情况自己编织的协议,不同设备之间通信可以有点区别,下边是我以前做的一个PC机与DSP控制器之间的通信子程序,供您参考,程序的意思是,PC机发一句话给DSP我要读取数据,请准备并发给我,实际是发了一条控制指令。这个结束后,按照协议开始读串口。子程序用VB书写,其中汉字皆为变量名,公共变量,一般为字节型16进制数。

Sub ReadDevice(ByVal 设备号 As Byte, ByVal 命令 As Byte, ByVal 收数据类型 As Byte)
读写标识 = 1 '!
命令字 = 命令 '!
节点号 = 设备号 '!
Dim DSD(4) As Byte
DSD(0) = 帧头 '!
DSD(1) = 设备号
DSD(2) = 命令
DSD(3) = &H0
DSD(4) = 命令

收帧长度 = 收数据类型 + 5 '!

With mian_loop.MSComm1
.RThreshold = 收帧长度
.InBufferCount = 0
.OutBufferCount = 0
.Output = DSD
End With
End Sub
希望能对你有多帮助
参考技术B 这就是通信过程中数据的格式嘛

通信协议的内容

多看 协议 的全部内容

STM32 串口通信基础知识

2、STM32的串口通信原理

串口通信是单片机最基本的功能,很多传感器模块与单片机的连接都会用到串口功能。串口通信,顾名思义就是将一整条的内容,切成一“串”个体来发送或接收。发送的核心思想是:将字符串中的一个字符写到一个寄存器中(此寄存器只能存一个字符),写入后会自动通过串口发送,发送结束再写入下一个字符。接收时会直接装入单片机缓冲区的一个字符型数组中,由程序依次读这个数组。
技术图片

上图是串口数据发送接收的过程做一个简单的图示。收发控制器根据寄存器配置,对数据存储转移部分的移位寄存器进行控制。当需要发送数据时,内核或DMA外设把数据从内存(变量)写入到发送数据寄存器TDR后,发送控制器将自动把数据从TDR加载到发送移位寄存器,然后通过串口线TX,把数据一位一位(bit)地发送出去,在数据从TDR转移到移位寄存器时,会产生发送寄存器TDR已空事件TXE,当数据从移位寄存器全部发送出去时,会产生数据发送完成事件TC,这些事件可以在状态寄存器中查询到。而接收数据则是一个逆过程,数据从串口线RX一位一位地输入到接收移位寄存器,然后自动地转移到接收数据寄存器RDR,最后用内核指令或DMA读取到内存(变量)中。发送完毕或者接收完毕都会有相应的状态或者事件,我们写代码时就可以通过这些事件来判断是否接收或者发送完毕,然后做出下一步。

注意:以数据接收为例,

因为是串行通信,所以是一个位一个位传输进来

但是MCU不可能一位一位的去读取,MCU是一次性的读取进来,所以这里涉及到移位寄存器。

 

USART接收数据框图

技术图片

 

 CPU可以通过总线去读取接收数据寄存器(RDR)

 

 

USART发送数据框图

CPU将8位数据写到TDR,写完后,TDR将8位数据传输给
发送移位寄存器,移位寄存器会按位一位一位从IO口移出去,

技术图片

 

 

转自 STM32 串口通信基础知识

 

技术图片

 

 

这个框图分成上、中、下三个部分。本文大概地讲述一下各个部分的内容,具体的可以看《STM32中文参考手册》中的描述。

框图的上部分,上文已经介绍过。数据从RX进入到接收移位寄存器,后进入到接收数据寄存器,最终供CPU或者DMA来进行读取;数据从CPU或者DMA传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过TX发送出去。

然而,UART的发送和接收都需要波特率来进行控制的,波特率是怎样控制的呢?

这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制。而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的。而接收器时钟和发送器时钟有是由什么控制的呢?

可以看到,接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法。

这里需要知道一个知识点:

    UART1的时钟:PCLK2(高速);
    UART2、UART3、UART4的时钟:PCLK1(低速)。
————————————————
版权声明:本文为CSDN博主「Yngz_Miao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38410730/article/details/79887200

 

以上是关于串口通信中“帧头+节点ID+数据长度+命令(因素ID)+附加数据+校验+帧尾”各部分怎么定义?的主要内容,如果未能解决你的问题,请参考以下文章

VC串口通信问题

LabVIEW串口通信

LabVIEW串口通信

51单片机做串口通信接收缓存区没反应

单片机串口学习

LabVIEW串口通信