# AdvancedSerialProtocol **Repository Path**: ampllit/AdvancedSerialProtocol ## Basic Information - **Project Name**: AdvancedSerialProtocol - **Description**: No description available - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-07-14 - **Last Updated**: 2022-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AdvancedSerialProtocol #### 介绍 AdvancedSerialProtocol 是一款十六进制串口协议,目前已经在Arduino,Atmel,STM32单片机上使用,代码基于C99开发。 #### 协议说明 | 帧头 | 编号 | 附加数据长度 | 设备地址 | 控制指令 | 操作命令 | 帧头校验 | 附加数据 | 附加数据校验 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 2(byte) | ... | 4(byte) | 其中当附加数据长度为0时,附加数据,和附加数据校验可以不附加 无附加数据 | 帧头 | 编号 | 附加数据长度 | 设备地址 | 控制指令 | 操作命令 | 帧头校验 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: | | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 2(byte) | | 04 | 00 | 00 | 00 | 02 | 05 | 30 66 | 有附加数据 | 帧头 | 编号 | 附加数据长度 | 设备地址 | 控制指令 | 操作命令 | 帧头校验 | 附加数据 | 附加数据校验 | | :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: | | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 1(byte) | 2(byte) | ... | 4(byte) | | 04 | 00 | 01 | 00| 02| 04| 56 F3| 04| D5 6F 2B 94 | #### 使用说明 ```cpp //构造无附加数据协议 uint8_t nBuildProtocol[ASP_MAX_SIZE]; AspSetMessageId(0x00); //设置消息编号 AspSetAddress(0x00); //设置设备地址 AspSetControl(0x00); //设置控制指令 AspSetCommand(0x01); //设置命令 uint16_t size = AspBuildProtocol(nBuildProtocol); //构造有附加数据协议 uint8_t nBuildProtocol[ASP_MAX_SIZE]; uint8_t data[8]; AspSetMessageId(0x00); //设置消息编号 AspSetAddress(0x00); //设置设备地址 AspSetControl(0x00); //设置控制指令 AspSetCommand(0x01); //设置命令 data[0] = 0x1; data[1] = 0x2; AspSetData(data, 2); //设置附加数据 uint16_t size = AspBuildProtocol(nBuildProtocol);//构造协议 //解析数据 //30ms内保证调用一次此函数,一般此函数放在单片机的定时器内调用 AspTimerExpired(); //arduino void serialEvent1() { while (Serial1.available()) { char inChar = (char)Serial1.read(); bComplete = AspAppendByteAnalysis(inChar); } } ```