程浥 发表于 2016-8-10 11:48:42

不定长自定义串口协议

本帖最后由 程浥 于 2016-8-10 11:54 编辑

1 概述
通信协议采用三层协议机制,物理层、数据链路层以及应用层。
约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。


2 物理层
        串口配置
这里将串口配置划分到物理层;
采用RS232三线协议,
波特率:115200bps,
奇偶校验:无校验,
数据位:8位,
停止位:1位,
流控:无,

        帧接收
采用中断接收数据,数据放入队列里,利用定时器判断帧时间间隔,达到固定时间认为一帧数据接收完毕。

3 数据链路层

表1 协议

        数据格式
通信协议格式AA+长度(数据包长度)+应用层协议+CRC8+0x55
现分别对各部分做详细介绍:
Head:包头。长度:1 bit
                该字段为帧的包头。
len:数据长度。长度:1 bits
该字段仅用于表示数据的长度。
data:数据段。长度:nbits
由命令ID和数据组成,数据由结构体构造,详细见协议层。
Crc:校验。长度:1 bits
                使用crc16校验,取8位。
tail:包尾。长度:1 bits
该字段为帧的包尾。

        转义定义
为了提高容错性,对除包头(0xAA)和包尾(0x55)进行转义处理
转义定义:对于非包头,包尾数据,出现0xAA , 0x55以及转义字符0xCC的数据均做转义处理,转义格式0xCC+数据,也就是在数据前面添加转义字符0xCC。

        校验处理
校验成功使用数据,校验命令ID,校验失败作为丢弃处理;

4 应用层
【空】


5 其他
cpu:stm32f407
平台:keil5
代码基于HAL库,里面建里有source insight工程

张金权-11级电子 发表于 2016-8-11 17:08:21

666,试下用串口空闲中断,不占用定时器资源

张金权-11级电子 发表于 2016-8-11 17:09:40

你把ST32的程序发在51版块里,有私心哦

程浥 发表于 2016-8-17 16:58:23

张金权-11级电子 发表于 2016-8-11 17:09
你把ST32的程序发在51版块里,有私心哦

你咬我

张金权-11级电子 发表于 2016-8-29 16:38:37

程浥 发表于 2016-8-17 16:58
你咬我

我呸                                                      
页: [1]
查看完整版本: 不定长自定义串口协议