重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 7257|回复: 4
打印 上一主题 下一主题

[经验] 不定长自定义串口协议

[复制链接]

16

主题

75

帖子

863

积分

版主

Rank: 7Rank: 7Rank: 7

积分
863
QQ
跳转到指定楼层
楼主
发表于 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:数据段。长度:n  bits
由命令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工程

MX40_APP_UART.zip

3.38 MB, 下载次数: 7

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
沙发
发表于 2016-8-11 17:08:21 | 只看该作者
666,试下用串口空闲中断,不占用定时器资源
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
板凳
发表于 2016-8-11 17:09:40 | 只看该作者
你把ST32的程序发在51版块里,有私心哦
回复 支持 反对

使用道具 举报

16

主题

75

帖子

863

积分

版主

Rank: 7Rank: 7Rank: 7

积分
863
QQ
地板
 楼主| 发表于 2016-8-17 16:58:23 | 只看该作者
张金权-11级电子 发表于 2016-8-11 17:09
你把ST32的程序发在51版块里,有私心哦

你咬我
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
5#
发表于 2016-8-29 16:38:37 | 只看该作者

我呸                                                      
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-4-27 03:34 , Processed in 0.174848 second(s), 33 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表