分享一个为电赛准备的通信协议,开源仓库链接:
没时间做视频了,就把开源仓库的README文件放在这里,后续更新去仓库看:
/dugu-jiuyuan/canglan-communication-system
(资料图片)
为了方便电子设备竞赛期间多个设备的通信与控制,设计如下通信系统。
考虑到绝大多数情况下,发送时通信传输的数据读取自变量,收到格式化的字节串后解析除的数据也将存入变量中,因此本通信系统将数据发送/接收与数据读写的过程合在一起,减少配置代码,提高开发效率。
通信的字节串格式如下:
'@' + 格式编号 + 数据段长度 + '=' + 数据段 + 数据段CRC校验值 + '#'
其中@,=.#三个符号作为关键字方便快速校验
同时,格式也有“数据编译格式”的意思,包含本次传输的变量名称、顺序的信息。发送/接收数据时按照格式编号指定的方式编译/解析数据与变量。发送时只需传入格式编号,即可自动编译待发送的字节串。接收时,可根据接收到的字节串中的格式编号信息自动解析内容。
通信系统支持三种数据类型的收发与解析:
有符号整数:长度为4字节,类型记作int
有符号单精度浮点数:长度为4字节,类型记作float
无符号字符数组:长度为n字节,类型记作string
为了开发,设置了自动工具生成配置文件。
使用如下步骤:
配置 CangLan_
运行 CangLan_,在 OBJ文件夹生成C,python两种语言的配置文件
将配置文件复制到工程文件夹中,导入添加文件路径
在需要使用"沧澜"通信系统的文件中引入""
,即可调用API
完整示例:
语言API:
extern CANGLAN_FORMATTER formatter
可以被所有导入了""
文件的文件引用的格式化工具结构体
`int CangLan_Compiler(CANGLAN_FORMATTER *formatter, u8 formatNum);``
编译指令,可以根据格式编号将变量编译为字节串,存储在字符数组formatter->buffer
中。
*formatter
:格式化工具结构体的指针
formatNum
:格式编号
返回值:编译后字节串,即formatter->buffer
的长度
int CangLan_Resolver(CANGLAN_FORMATTER *formatter, u8 *rxstr, int rxstr_len);
*formatter
:格式化工具结构体的指针
rxstr
:接收到的字节串的指针
rxstr
待解析内容的长度
返回值:格式编号
void CangLan_Print(CANGLAN_FORMATTER *formatter);
打印该格式化工具可处理的全部变量
略(等高老师写这个)
example文件夹中提供了三个样例程序与其对应的CangLan_文件,可供参考使用
lib为库文件夹,不要乱改
C语言文件中默认的printf配置为""与"",如需修改为其他输出方式(例如在PC测试通信协议)可以前往"CangLan_"文件中修改引用的头文件。
STM32使用Keil MDK编译时应在魔术棒的c/c++选项卡中开启GNU选项。
Copyright 2015-2022 太平洋知识产权网 版权所有 备案号:豫ICP备2022016495号-17 联系邮箱:93 96 74 66 9@qq.com