首页 > 编程知识 正文

单片机串口通信原理,串口通信帧格式

时间:2023-05-03 21:27:45 阅读:175932 作者:1047

单片机常用串行通信协议的PIN 1、单片机的PIN 2、 常用通信协议类型1 .无格式2 .帧头帧3 .帧头字段数据附加功能代码4 .帧头字段数据附加功能代码目标地址5 .帧头字段数据附加功能代码传输

前言

由于最近使用了很多串行端口,所以我觉得有必要简单列举一下使用过的通信协议的帧。 这样就可以总结出来和大家交流了,需要的东西可以直接参考

而单片机串口概述单片机中的串口(UART )采用单字节收发的通信方式一般三条线就足够了,如果是标准的线序对接,9条DB9类型,就是常用的对三线(rx )

在串行端口上添加外部控制芯片时,串行端口将具有两种通信类型: RS232和RS485。 RS232的逻辑1和0对应于15V和-15V,RS485的逻辑1和0对应于A B端口的电压差2 ~ 6和-2 ~ -6。 RS232无法连接多个子设备,能够进行全双工通信,RS485能够实现多个设备的装载、单双工通信。

因为是单字节收发,所以实现分析和发送需要规定的通信格式,这是通信协议。

二.常用的通信协议类型1 .无格式、无格式时,可能是王道,许多设备制造商直接使用字符串命令式控制。 例如

/s1000设定速度为1000

/r0000恢复出厂设定。

它的优点是部分资源和性能可以直接在一般设备上使用,不使用队列和缓存,在中断过程中可以直接读取和赋值数据,简单粗暴。 switch case很容易解决。 适用于简单、短命令、短数据的情况。

缺点是通信数据不会变得太长,容易误操作。

2 .帧头帧数据长度奇偶校验位帧尾0 x f 50 x 40 x 010 x 020 x 030 x 040 xc 50 x5f这种帧头帧或奇偶校验位格式的简单使用。 一般情况下,由单片机接收数据后存入缓存队列,然后在主循环进行基于帧头帧尾提取缓存队列数据,逐帧赋值的操作。

有很多检查的东西。 和检查、CRC等一样。 我认为在这里也可以实现加密。 如果自己设置加密算法,则通过加密算法获得奇偶校验位。 别人拿不到加密算法,光靠通信协议也移动不了设备。 (骚动操作大多没有奇偶校验位,越简单越可靠) )。

这有点简单可靠,上位机易于根据通信格式进行数据交换,适合长数据的传输。

3 .帧头帧头数据附加功能代码帧头功能代码数据长度奇偶校验位帧头0 x f50 x 010 x 010 x 010 x 020 x 030 x 040 xc 50 x5f格式与第二种兼容

可以无限添加功能代码。 例如,使用两个功能代码,一个指示要对哪个变量进行操作,另一个指示是读取操作还是写入操作。 这样的东西用得最广泛吧。 工作量也不是很多,自己调试也可以很容易地实现。

4 .帧头帧头数据附加功能代码目标地址帧头地址功能代码数据长度奇偶校验位帧头附加地址,如0xf 50 xcc0x 010 x 010 x 020 x 030 x 040 xc 50 x5f 具备识别设备的能力。 例如,如果您随意访问同一类型、不同地址的设备,则发送命令设备时不会有鸟。 它适用于485通信总线,用于标识所有设备是否基于地址执行。

具有设备识别功能,具有命令执行唯一性,适合485通信的优点。

缺点是使用232的话会有一点鸡肋。 到现在为止看到的,不管是485还是232都经常通信。

5 .帧头帧头数据附加功能代码转发功能帧头源长目标长目标长功能代码数据长奇偶校验位帧头0x f 50 x 010 xcc0x 020 xdd0x bb0x 010 x 40 x 01 x 020 x 030 使用过的最强大的串行通信协议,根据地址长度和地址域判断是否需要传输下一级别,或者是否需要执行操作命令。

该命令过程向0XCC的装置发送命令帧到0XDD的装置,0XDD的装置发现自己不是最终目标,并重组帧并向地址0XBB的下一级装置发送,0XBB在收到命令后发现自己是最终目标

这种通信协议的优点是功能齐全并且能够传输。

缺点是分析帧的程序很复杂,增加一个传输就需要时间重组帧,传输越多时间越长。 )但是,有谁不会在串口上用这么多子类呢? 你病了吗? 也可以充分考虑使用其他通信方式。

这可以使串行端口适应其他通信方式(例如can、tcp/ip等),如果程序处理得当,应该可以实现不同通信方式的混搭。 例如,母板可以通过串行端口发送,下一个阶段可以通过can总线向更多的设备发送。 can总线发送子设备后通过串行端口发送和接收。 总之,如果有传输的话,可能会有一定的通信兼容性。

稍微复杂一点的麦片还是第四种方式就足够了。

6.MODBUS RTU这个牛批,我没怎么用过,所以简单说明一下。 这台单片机必须在485进行通信。 牛是牛的正规统一标准,有的现成的集成模块买来后就可以使用,在电气类工业控制中像PLC一样经常使用。

Modbus-RTU模式意味着,如果将控制器配置为通过Modbus网络以远程终端模式(RTU )模式进行通信,则消息中的每个8Bit都包含两个4位十六进制字符。 Markdown将文本转换为HTML1。

操作方式的说明和

4的差不多(但人家就是做成了认可的标准就是牛),多涉及一些寄存器的操作,寄存器一般都是按位操作,每一位都有每一位的功能,一下就扩展了很多用处。

7.其它

其它就是其它,可以混为一谈的一些方式,这些多半是上述几种的混搭型。有的有帧头,没有帧尾,有的有帧尾但用地址做帧头,有的不加校验,有的用固定长度实现帧尾的功能,有的奇葩还用地址做帧头,校验做帧尾还不固定长度。

总结

差不多了,一个串口基本的通信协议帧也就这些了,后续想到了再添加。不要一味的追求功能多,简单实用才是最可靠的。能不加通信协议就不加,最好。
突然间想到了一个点子,单片机程序是不是也可将上述协议帧中的每一个功能位模块化,做到一种完全的兼容,比如我用到了帧头我就调用一个添加程序添加帧头,用到了功能码就专门添加一个功能码位放功能码,外部再做一个大封装,这样会很容易一个通信模板兼容所有通信协议。(也许也没必要,大多数都很简单,提取的数据也不多,何况我的C++还一塌糊涂,等我有实力了在考虑吧,不慌)

参考文献

Modbus通讯协议(二)—RTU. ↩︎

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。