通用串口通讯程序设计

合集下载

VB 串口通信程序设计典型实例

VB 串口通信程序设计典型实例

V B串口通信程序设计典型实例利用VB开发串口通信程序既可以使用MSComm控件也可以调用Windows API函数实现。

不过,只要MSComm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和API调用一样强,甚至比它还好且使用起来更加简单。

在本章提供的串口通信程序设计中,除了PC与PC串口通信外,PC与单片机、PC与智能仪表、PC与PLC、PC与GSM短信模块等串口通信任务的实现均采用MSComm控件。

6.1 PC与PC串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。

本设计通过两台PC串口3线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。

6.1.1 PC与PC串口通信程序设计目的(1)掌握PC与PC串口通信的线路连接方法。

(2)利用MSComm控件和API函数实现PC与PC串口通信的程序设计方法。

6.1.2 PC与PC串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-1所示。

表6-1设计用软、硬件6.1.3 PC与PC串口通信程序硬件线路图线路说明,在计算机通电前,按图6-1所示将两台PC通过串口线连接起来:计算机A 串口COM1端口的TXD与计算机B串口COM1端口的RXD相连,计算机A串口COM1端口的RXD与计算机B串口COM1端口的TXD相连,计算机A串口COM1端口的GND与计算机B串口COM1端口的GND相连。

图6-1 PC与PC串口通信线路6.1.4 设计任务利用MSComm控件和VB API函数编写程序实现PC与PC串口通信。

任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。

基于ARM的LPC2132通用串口驱动程序设计

基于ARM的LPC2132通用串口驱动程序设计
2 01 4, 3 O(i ): 8~ 1I
J o u r n a l o f Gu a n g x i Ac a d e my o f S c i e n c e s
Vo 1 . 3 0 , No . 1 Fe b r u a r y 2 0 1 4
基 于 AR M的L P C 2 1 3 2通 用 串 口驱 动 程 序 设 计
( 广 西瀚 特信 息产 业股 份有 限公 司, 广 西桂 林
5 4 1 0 0 4 )
( Gu a n gx i Hu nt e r I nf o r ma t i on I n du s t r y Co., Lt d ., Gui l i n, Gua n gx i , 5 41 0 0 4, Chi na )
d r i v e r i s d e s i g n e d . [ Me t h o d ] Ba s e o n t h e ARM L PC2 1 3 2 mi c r o p r o c e s s o r c h i p ,we p r o p o s e t h e
wi t h o u t c o mmu n i c a t i o n wi t h a l d r i v e r . [ Re s u l t ] Th i s s e r i a l p o r t d r i v e r i s t e s t e d a n d a p p l i e d s t a b l y i n r e mo t e a c q u i s i t i o n e n v i r o n me n t f o r a l o n g t i me .[ Co n c l u s i o n ] Th i s s e r i a l

基于EVC环境的串口通信程序设计

基于EVC环境的串口通信程序设计

20 Si eh E gg 0 7 c . c . n n. T
基于 E C环境的串 口通信程序设计 V

( 南京农业大学工学 院 , 南京

张 继锋
20 3 ; 10 1信息产业部第二十八研究所 , 南京 2 0 2 ) 10 9


介绍 了在 P C硬 件平 台下, n o sC P Widw E操作 系统 中实现 串 口通信程序设计 的通用方法。分析 了E C环境 中串口通 V Wi o sC n w E d 串口通信 A
编 译 器
C C++编 译 器 /
●为 A M 设 备 提供 的 C A MC C+ R LR /
+编 译 器
● 为 MP IS和 MIS P设 备 提 供 的 PF
时。
通信程序 , 可以使用 P C去控制各种配备 串口的设 P
备。 Mi oo n o s E是 为 各 种 嵌 入 式 系 统 和 c sf Widw r t C
产 品设计 的一 种压 缩 的 、 有 高效 的 、 具 可升 级 的操 作
系统 ( S 。Widw E作 为 目前掌 上 电脑 的 主流 O) no s C
e e ddV sa Mb d e i l u C++( V 是 Mi oo 公 司 E C) c sf r t
不支持重叠 IO, / 本文是使用多线程来执行 同样类 型 的重叠操 作 , 当主线 程忙 时 , 用单独 线程来 处理 利
同步 IO操作 , 、 / 读 写操 作 有 各 自独 立 的线 程 来 处
操作 环境 。
使用 E C开发程序首先要 根据 自己使用的掌 V 上 电脑 C U型号安 装相 应 的 S K, 择相 应 的编 译 P D 选 器, 例如使用基 于 A M芯片的掌上电脑 , R 开发程序

RS232串口通信C++课程设计

RS232串口通信C++课程设计
2
2.1
设置和修改串口通信参数,包括端口,时间,波特率,奇偶校验位,数据位,停止位。
2.2
显示当前串口通信参数,包括端口号,波特率,时间,奇偶校验位,数据位,停止位,点击参数设置按钮,弹出参数设置窗口,当完成设置后点击确定,子窗口隐藏,显示界面是数据发送和接收界面。
2.3
参数设置后,打开串口,在程序中设置了一个默认的COM4但是在参数设置窗口可以设置串口,实现通信。
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CLASS1DLG_H__B8BA98C1_5D58_47BE_B664_E97E77EC5076__INCLUDED_)
随着当今信息技术的快速发展,通信已成为信息技术中的关键问题。尤其在控制领域,以何种方式实现计算机与外围设备间既简单又可靠的通信,就显得特别重要。由于串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一。VC++是新一代面向对象的可视化开发工具,提供了良好的界面设计能力,在PC机的串口通信方面有很强的功能。它具有功能强大、简便易用和代码执行速度快等特点,在通信软件的开发中成为越来越多开发人员的首选工具。无论在工业控制中PC机和单片机之间的通信,还是在2台Pc机之间的串口通信,都具有相同的原理。只要掌握其中的通信本质,就能灵活地实现串口通信,串口控制。

单片机串口通信设计方案

单片机串口通信设计方案

单片机串口通信设计方案1.绪论1.1课题背景及意义目前,单片机的发展速度大约每两、三年要更新一代,集成度增加一倍,功能翻一番。

其发展速度之快、应用范围之广已达到了惊人的地步,它已渗透到生产和生活的各个领域,应用非常广泛。

在汽车、通信、智能仪表、家用电器和军事设备的智能化以及实时过程控制等方面,单片机都扮演着非常重要的角色[1]。

因此单片机的设计开发具有广阔的前景。

所以,对于电气类学生而言,学习一种单片机的开发是十分必要的。

而51系列的单片机,随着半导体技术的发展,其处理速度更快,性能更优越,在工业控制领域上占据十分重要的地位,通过对51系列单片机的学习而掌握单片机开发的过程是一种不错的选择。

然而单片机是一门综合性、实践性都很强的学科,其学习涉及的实验环节比较多,硬件设备投入比较大,对于大多数人而言很难投入大笔资金去购买实验器件。

而且要进行硬件电路测试和调试,必须在电路板制作完成、元器件焊接完毕之后进行,但这些工作费时费力。

因此引入EDA软件仿真系统建立虚拟实验平台,不仅可以大大提高单片机的学习效率,而且大大减少硬件设备的资金投入,同时降低对硬件设备的维护工作。

EDA设计思路是:从元器件的选取到连接、直至电路的调试、分析和软件的编译,都是在计算机中完成,所用的工作都是虚拟的。

虽然现在的电路设计软件已经很多,诸如PROTEL、ORCAD、EWB 、Multisim等,不过这些软件之间的差别都不大:都有原理图和PCB制作功能,都能进行诸如频率响应,噪音分析等电路分析,主要用于模拟电路、数字电路、模数混合电路的性能仿真与分析,但对于单片机设计及软件编程,最重要的是两者的联调,这些软件都无法实现,所以造成了单片机系统设计周期长、设计费用高等缺点[2]。

新款的EDA软件Proteus解决了上述软件的不足,成为目前最好的一款单片机学习仿真软件。

Proteus 软件是由英国Lab Center Electronics 公司开发的EDA 工具软件。

Vxworks串口通信程序设计与实现

Vxworks串口通信程序设计与实现
#n ld i c u e< t n I > sr gh i #n ld i c u e< i Li h so b >
_
1 Vx rs简 介 wo k
从 19 9 5年 以 后 , S 公 司 推 出 了 一 套 实 时 操 作 系 统 开 发 环 WR
# n l d i Li - > i c u e< o b h 撕 n l d s d oh c u e< t i .> 衔n l d i c 1 > c u e< o t. h
பைடு நூலகம்
境— — T ma0 o ao集 成 环 境 提 供 了高 效 明 晰 的 图 形 化 的 实 时 应 o d 。T r d n
用 开发 平 台 ,它 包 括 一 套 完 整 的 面 向 嵌 入 式 系 统 的 开 发 和 调 测 工 具 。 T rao环 境 采 用 主 机— — 目标 机 交 叉 开 发 模 型 ,应 用 程 序 在 主 机 的 o d n
2 串 口通 信 基 本 原 理
i tc n i n o fg
_
cm1 od o ( i) v
/ 口 l配置 函数 / 串
串 L在 嵌 入 式 系 统 中是 一 类 重 要 的 数 据 通 信 接 口 , 本 质 功 能 是 I 其 作 为 C U 和 串 行设 备 间 的编 码 转 换 器 。 当 数 据 从 C U经 过 串行 端 口 模 式 :I E MO E P P LN _ D 发 送 出去 时 , 节 数 据 转 换 为 串 行 的位 ; 接 收 数 据 时 , 字 在 串行 的位 被 转 i ts , B U A E9 0 ) / 置 串 口波 特 率 为 9 0 b s o l f  ̄O A DR T ,6 0 ; / c(d 设 60 p 换 为字 节 数 据 。应 用 程 序 要 使 用 串 口进行 通 信 , 须 在 使 用 之 前 向 操 必 i ts , F U H,】 o lf  ̄O L S o ; c (d / 空 输 入 输 出 缓 冲 区 / 清

modbus rtu 程序设计及 轮询编程

modbus rtu 程序设计及 轮询编程

modbus rtu 程序设计及轮询编程Modbus是一种通用的通信协议,被广泛应用于工业自动化领域。

Modbus通信协议分为三种类型:Modbus ASCII、Modbus RTU和Modbus TCP/IP。

在这里,我们会重点探讨Modbus RTU的程序设计及轮询编程。

1. Modbus RTU协议简介Modbus RTU是一种串行通信协议,采用二进制编码,传输速率可达到115200bps,支持多主机(最多247个从站)同步通信。

Modbus RTU协议的数据格式通常由地址码、功能码、数据、CRC校验码组成。

2. Modbus RTU程序设计在Modbus RTU程序设计中,主机和从机之间进行数据通信。

主机是发起通信的一方,控制整个通信过程。

主机将命令发给从机,从机执行后返回响应消息。

在程序设计中,需要进行如下步骤:(1)初始化串口;(2)发送请求命令;(3)等待从机返回数据;(4)解析响应数据;(5)关闭串口。

3. Modbus RTU轮询编程轮询编程是指主机通过循环向所有从站进行查询,实现数据采集的过程。

轮询编程通常分为如下几个步骤:(1)设置从站地址码;(2)设置功能码;(3)设置数据区域;(4)发送命令并等待响应;(5)解析响应数据并存储;(6)重复执行以上步骤。

在轮询编程中,需要注意的是从站响应时间和主机查询时间应该保持一致,否则可能会导致数据出现丢失。

综上所述,Modbus RTU是一种常用的通信协议,在工业自动化领域有广泛的应用。

程序设计和轮询编程都是Modbus RTU通信的基础,操作正确才能保证通信的稳定和高效。

一种串口通信程序的设计与实现方法

一种串口通信程序的设计与实现方法

效的方 法 , 它可以利 用 On o C mm 事件捕获 并 处理通 信 中发 生 的事件 或错误 , 时性 较 强。 实 O C mm 事 件是 MS o no C mm 控件提供的唯 一 的事 件 ,当有 数据到 达端 口或端 口状 态发 生 改变或有通讯错 误时 ,都将 触发 O C mm事 no 件 ,以获取 和处 理这些 通讯 事件 和通 讯中产 生的错误 。通 过查询 C mmE e t o v n 属性值 , 可以获 得关 于通 讯事 件和 通讯错误 的 完整信 息 ,进 而进 行处 理 。这 是 一种功 能很 强的处 理 串行 口错 误 的方 法 ,具 有 程序 响 应 及时 , 可 靠性 高 的优 点 。 示 : 查询方式是 程序通过查询 C mm vn 属 o E et C0 mP r : o r 0 t 设置 并返 回通信 端 口号 ; 性 的值 来判 断通信 过程 中的事 件或 错误 ,这 S ti g : e tn s 以字符 串的 形式设 置并 返 回波 特 种 方式 适合 于应 用程序 较小 、 实时性 要求 不 率 、 奇 偶 校 验 、 数 据 位 、 停 止 位 ; 是很 高的系统。 P rO e : o t P n 设置并返 回通信端 口的状态 , 也可 鉴于 以上 两种 通信 方式 的优缺 点 以及实 打 开和关 闭端 口;I p t 保 存和接 收从接 收 际应用 的需 求 ,本 系统 采 用查询 方式 来处理 n u: 缓 冲区获 得的数据 I up t 向发送缓 冲区发 通 信过 程 的 事件 或 错误 。 tu: O 送 命令和数据 ;Ib f rie 设 置接收缓 冲 n u f sz : e 区分配的 内存 数量 ;O tufri : 置发送 4远程门禁系统应用实例 ub f s e设 e z 缓 冲区分 配的内存数量 ; t rs od 设置为 4 1 系统设计 简介 R h eh l: . 某一 定值 , 每当接收缓 冲区收到该 定值个位字 当红 外线传 感 器感知 有 用户刷 卡时 ,读 符时 , 都会使 MS o C mm控件 产生 O C m 事 卡 器将卡 中信 息读 出 ,通过控 制 器传到 上位 n om 件 ; t rs od: 置为某一 定值 , 当传 输 机 ( 机 ) S h eh l 设 每 PC ,与 数据 库 中信 息 进 行 比对 , 缓 冲 区 中 的 字 符 个 数 少 于 该 定 值 时 , 如果 正确 ,上 位机 给控制 器发 送信 息 ,控 制 M sC0 m 控 件 产生 OnC0 m 事 件 ; 器 根 据 收 到 的 信 息 判 断是 否 需 要 开 门 和 关 m m Ip t d : n uMo e 确定 Ip t n u 属性取 回的数据格式 门 。 由于 该 门禁系 统是远 程控 制的 ,因此信 是 字 符 串 还 是 二 进 制 数 据 的 数 组 ; 息 需 要 通 过 以太 网传 输 ,控 制 器的 传 输 是 Ip te : n uL n 设置并返 回 Ip t n u 属性从接收缓 冲 Rs 2 2格式 的 ,而远 程 网络 数据 传输是 3 区读 取的字符 数 ; C mm: C mmE e t TC / P格 式的 ,因此 需要使 用接 口 换器 On o 当 o v n P I 转 属性 的值 变化时 , 产生 O C mm 事件 , 就 no 标志 完成 两种 数据 格式之 间的 转换 。整 个系统 的 发 生 了 一 个 通 信 事 件 或 一 个 错 误 ; 数据 传输 流 程如 图 1所 示 。 C mmE e t返 回最 近的通 信事件和 错误 ; 42 P o vn : . C机 单片机 串行通信 电路设计 C mE S n : o v e d在传 输缓冲 区中有 ̄Sheh l . rsod t 该 系统使 用的单片机 为凌阳 S C 0 1 P E6A 数 少 的 字 符 时 , 产 生 该 事 件 ; 单片机 ,利用单 片机 自带串 口与 P C机进行通 Co mEv e d c ie: S n Re ev 收到 Rt ehod个 字 信 , 中R - 3 接 口芯片完成 S C o l hrs l 其 S 22 P E 6A与 符 , 事件将 持续产生 直到用 Ip t 该 n u 属性从接 P C机 串 口 间的电平转换 。整个通信 电路 的 之 收缓 冲 区 中删 除数 据 。 框 架如图 2 ‘ 。根据实 际的需 要 , 卡器也 所示 读 32 M C m . S o m控件通信步骤 可以通过 RS 3 接 口芯片直接连 到上位机 -2 2 MS o m 控件进 行 串口通信的一 般步骤 上 。 Cm 为 : 置通 信对 象 、通 信 端 口号 以及 其他 属 4 3 通信 协议说明 设 . 性; 设定 通信协 议 ;打 开通 信端 口, 进行 数据 上 位 机 与 下 位 机 之 间 以 通 讯 速 率 的 传 送 ;关 闭 通 信 端 口 。 9 0b s 6 0 p /秒传输 数据 ,无奇 偶校验 ,八位 33 M a m , S o m控件通信方式 数 据 位 和 一位 停 止 位 。 MS o C mm 控 件有两 种处理通 信的 方式 , 4 4 串行通信 模块框架 . 即事 件 驱动 方式 和 查询 方 式 。 上位机 与 S C 0 1 P E 6 A单片机通 过一系列 应 答联络后 ��
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 6 页 共 13 页
(状态机也就这个原理。状态机多了 PUSH\POP 栈流程。)
设计功能码,必须考虑兼容性和扩展性,对数据帧的功能进行划分,坚决杜绝想到一个算一 个,功能码也不能随意/随便/随心的安排,否则在以后增加数据帧的时候会很麻烦。
功能码长度:1 个字节(取值范围:0‐255) 一般 256 种功能分类够用;不够就扩展到两个字节。 编码规则(建议): 高四位二进制作为父类编码,低四位二进制父类中子类。这样就可以将系统数据通信帧 分为 16 个大类,每个大类下有 16 个可用的具体类,当你增加功能码的时候,就可以根据 你的设计来确定属于哪个大类了,然后再插入进去。这样在管理、维护这些通信数据时你会 发现很方便。 这个编码规范在 ARM 内核的中断系统和设计 uCOS II 任务优先级的时候都有使用到, 在设计项目的通信协议的时候就是运用了这些思想。
校验码 一帧数据在传输过程可能会被干扰,使得接收端获取的数据是错误的。为保证一帧数据的准 确性和完整性,就引入了校验功能,好的校验可以逆向还原一帧数据中的错误数据。 (密钥不在这里讨论!)
校验有很多方式,累加和校验、CRC 校验等。
第 7 页 共 13 页
(奇偶校验只针对 1 个字节校验,一般不做 2 字节以上数据帧校验)。
数据域长度 数据域长度信息是非常关键的数据。(当然,也有特殊类型通讯协议/规约不需要.) 数据域长度字段的值限定/定义数据域的字节个数信息。详见“表(1)、表(2)、表(3)”
帧格式数据域长度与数据域关系划分。
案例之一: 接收程序流程刚好将帧头、功能码/判断完毕,然后中断程序莫名原因(非法指令)引
这种校验方式占用单片机的运算资源量较大,目前有些单片机嵌入了硬件 CRC 模块(如 stm32 单片机)。
校验是通讯规约约定检验字节起点和结束位置。 建议:从帧头开始到数据域最后一个字节。也可以只检验数据域,这只是区别在单片机运算 量问题。建议从帧头开始校验,能保证整个帧数据的准确性。
帧尾 前面说了,帧尾在空闲中断中可以不用,RXNE 中断接收时其实也可以不用,当然也可以加 上,好处就是当你用串口助手查看数据流时,可以观察出一帧数据是否发送完整了。
累加和校验算法简单,单片机的运算资源占用量小,累加最后只取最低字节就行,不是高字 节(至于原因后续再单独聊)。保存累加和的变量使用 1 个字节,简单好用。
CRC 校验,算法比较复杂。CAC 是对帧数据中每个字节的每二进制位(BIT)进行校验,具 有很高纠错率,只要数据帧中有一个数据的 1 个二进制位发生变化,都能检查出错误。
第 5 页 共 13 页
1.2 接收程序编写考虑因素
数据“功能码”指针 数据包指针 FIFO 缓存读/写指针的互斥锁释放顺序 数据帧检查/校验 串口空闲 缓存数据帧存放时间/生命周期,超时识别 通讯数据吞吐量,(帧间隔时间,保证单片机有充分时间处理其他事情。)
帧头 只要保证帧头字节数据内容,在所有通讯数据字节流中,除帧头有意为之而出现,那就
确保及时接收数据: ① 采用 DMA 模式(单片机若有); ② 设定串口通讯为最高有效优先级中断; ③ 接收程序在读取 BUF 数据时进可能先读取到临时/中转寄存器中,再做数据识别。
数据域 整个帧需要的最有用的数据。 接收/发送函数能处理各种类型的数据,建议参数类型定义成 void *DataPtr 是不错的选择。
通用串口通讯程序设计
作者:和光同尘 版本:V1.0

做硬件开发近 20 载,花了近十年做基础开发,对硬件开发略知一二,接触的做国防/ 工业大项目的人才我就是和他们沟通中获取了很多思想;人生已过而立之年,不惑解疑,总 想写点什么。从一线研发(做了 4 年),开发(3 年),硬件开发主管(12 年),算起来人生 从不到弱冠之年(中专毕业)开始接触 MCS51、AVR 等 8 位处理器到 ARM v7 核、CoretxM 核的 32 位处理器,CPLD/FPGA、PLC…………啰嗦了!! 最近因为工作原因需要把一些自己感悟的记录下来,希望传递给入门的有心沉下心做基础健 壮扎实的初学者。
帧内位置
0,1
2
3,4
5
6 …… N
N+1
N+2
N+3,N+4
取值范围 :(0x3A),=(0x3D) 0x00 - 0xFF 0x0 ≤ Len ≤ 0xFFFF
0x00 ~ 0xFF
0x00 ~ 0xFF
CR(0x0D),LF(0x0A)
注:
1.N 取值范围:0 To 65535 。 2.CRC 验证起止段:开始于帧头(SOF),结束于 CRC 验证码(低字节)前最后一个有效数据字节(DataBuf[N]),CRC 验证:多项式(0xA001).
N+3 0x0D
第 4 页 共 13 页
表(3)类通用型(TYPE_C/V1.0)帧格式
I 类通用型(TYPE_C/V1.0)帧格式
8*N 串二进制流
N 串字节流
校验/检查区域(CHECK AREA)
帧结构 帧头段(SOF AREA)
数据段(DATA AREA)
数据域
SOF
Function
Lenght
起没有及时读取/释放串口 BUF 中数据,就会在获取数据时得到错误的数据,这个错误的长 度数据可能导致创建的栈溢出,引发周边数据被篡改(注意所有字节变量定义区域选择,根 据单片机 RAM 资源,合理分配变量所处位置,尽量局部变量定义在 DATA、IDATA 区域,程 序执行效率也高些;数据栈定义在 XDATA 区域),数据栈溢出处理不好将是灾难性事件。在 接收数据域的数据之前切记一定要判断数据域长度信息(空闲中断除外)是否合法,不合法 的及时抛弃掉这帧数据,复位接收标识状态,准备新一帧的数据检查接入栈工作。
字节数
1BYTE
1BYTE
1BYTE
1BYTE
(2 - 4)Bytes
效验码(CHK AREA)
CRC16 校验,多项式(0xA001) CRC16 低字节 CRC16 尾
2Byte
1Byte
帧内位置
0
1
2
3
4
5
……
N
N+1
N+2
取值范围 注:
:(0x3A)
0x00~0xF F
0x00~0xFF
0x00~0xFF
0x00~0xFF
0x00 ~ 0xFF
1.Databuf[N],N 取值范围:2(PC->H 型),4(H 型->PC)。
2.CRC 验证起止段:开始于帧头(SOF),结束于 CRC 验证码(低字节)前最后一个有效数据字节,CRC 验证:多项式(0xA001)。
‘U’(55H)、‘@’(40H)等等 只要保证帧头字节数据内容,在所有通讯数据字节流中,除帧头有意为之而出现,那就
是帧头。建议最好有两个字节及以上,这样数据出现与帧头一致的概率更加小,才做到独一 无二的特殊性。
第 2 页 共 13 页
表(1)类通用型(TYPE_A/V1.0)帧格式
I 类通用型(TYPE_A/V1.0)帧格式
第 1 页 共 13 页
正文
做嵌入式硬件开发一般都会用到通讯数据交互,这就涉及通讯协议/规约的设计。本文 从基础的串口(RS232、RS485 等)为模型进行讲解。 说道串口通讯,就是编写串口程序,简单的就是 1 个字节的发送,1 个字节的接收,但这不 能满足绝大多数实际工作业务需求,实际需要一串字节数据的交互,A 发送,B 接收……Z 接收;Z 机……B 机收到根据情况需要回复(ACK)A 机,这个过程就叫交互双向通讯(本文 不讨论多主机、1 主机相对复杂通讯机制。)。这种通讯就需要提前设计好通讯的规约(大家 约定好暗号——每个字节代表什么意思)。 接下来编写通信程序(发送/接收),如何写出一个健壮高效串口程序?是否健壮高效其实很 大一部分取决于通讯接收程序的架构。 通讯程序编写依据是——通讯规约,通讯帧的设计。 I 类通用型:
8*N 串二进制流
N 串字节流
校验/检查区域(CHECK AREA)
帧结构 帧头段(SOF AREA)
数据段(DATA AREA)
数据域(DATA AREA LENGHT)
SOF
Lenght
帧头
数据域长度
Function
DataBuf[N]
功能码
数据
字节数
2BYTE
2BYTE
1Byte
0Bytes To NBytes
特例 1: 串口空闲中断:帧头、帧尾都可以不用。建议,帧头保留,帧尾可以不需要。当单片机 没有串口空闲中断时考虑,也可能有其他考虑,所以帧头得保留。
功能码 功能码主要用于说明该数据帧的功能,也可作为函数指针的索引,一个索引值代表了一
个具体功能,据此可找到对应的功能函数。
比如: 设计一个函数指针数组,通过功能码进行索引,进而跳转到对应的功能函数执行程序。
(DATA AREA LENGHT)
帧头
功能码
数据域长度
DataBuf[N]
数据
字节数
2BYTE
1BYTE
2Byte
0Bytes To NBytes
效验码(CHK AREA)
CRC16 校验,多项式
(0xA001)
CRC16
CRC16
低字节
高字节
2Byte
帧尾段(EOF AREA)
EOF 帧尾 2Byte
||帧头段|===|数据段|===|校验码|===|帧尾段|| II 类时隙通讯:
||开始时隙 T(T1T2T3T4T5T6)|=|功能码|=|数据段|=|校验码|=|结束时隙 T(T1T2T3)| 注意:时隙只是纯粹的前后两帧数据的间隔时间,这期间坚决不能有数据产生。
相关文档
最新文档