|
@@ -0,0 +1,258 @@
|
|
|
+# STM32 MCU通讯协议说明
|
|
|
+
|
|
|
+## 1. 通讯概述
|
|
|
+
|
|
|
+本通讯协议用于STM32 MCU与上位机之间的双向通信。通信采用串口(UART)方式,波特率115200,数据格式为8位数据位,1位停止位,无校验位。
|
|
|
+
|
|
|
+## 2. 消息格式
|
|
|
+
|
|
|
+### 2.1 基本格式
|
|
|
+所有消息均采用以下统一格式:
|
|
|
+```
|
|
|
+$[命令类型],[参数]#
|
|
|
+```
|
|
|
+
|
|
|
+- `$`: 消息起始标识符
|
|
|
+- `命令类型`: 表示消息类型,如KEY、ID、V等
|
|
|
+- `,`: 参数分隔符
|
|
|
+- `参数`: 命令相关的参数
|
|
|
+- `#`: 消息结束标识符
|
|
|
+
|
|
|
+### 2.2 特殊格式
|
|
|
+在设备支持MAC地址的情况下(开启了WDFJKEY_MAC_ADD宏),消息包含额外的MAC信息:
|
|
|
+```
|
|
|
+$[MAC高字节][MAC低字节][命令类型],[参数]#
|
|
|
+```
|
|
|
+
|
|
|
+## 3. MCU发送消息类型
|
|
|
+
|
|
|
+### 3.1 按键消息 (KEY)
|
|
|
+格式: `$KEY[按键值],[状态]#`
|
|
|
+
|
|
|
+#### 按键值:
|
|
|
+| 值 | ASCII | 描述 | 功能描述 | 消息示例 |
|
|
|
+|-----|--------|------------|------------|------------|
|
|
|
+| 0x35 | `5` | 按键5 | 面板呼叫 | `$KEY5,1#` (按下), `$KEY5,2#` (释放) |
|
|
|
+| 0x36 | `6` | 按键6 | 手柄呼叫 | `$KEY6,1#` (按下), `$KEY6,3#` (长按) |
|
|
|
+| 0x37 | `7` | 按键7 | 卫生间紧急呼叫 | `$KEY7,1#` (按下), `$KEY7,2#` (释放) |
|
|
|
+| 0x3B | `;` | 按键8 | 增援按键 | `$KEY;,1#` (按下), `$KEY;,3#` (长按) |
|
|
|
+| 0x5D | `]` | 按键9 (原为`<`) | 护理按键 | `$KEY],1#` (按下), `$KEY],2#` (释放) |
|
|
|
+| 0x3D | `=` | 按键10 | 换药按键 | `$KEY=,1#` (按下), `$KEY=,2#` (释放) |
|
|
|
+| 0x5B | `[` | 按键11 (原为`>`) | 取消所有按键消息 | `$KEY[,1#` (按下), `$KEY[,2#` (释放) |
|
|
|
+| 0x3F | `?` | 按键13 (拔针功能) | 拔针按键 | `$KEY?,1#` (按下), `$KEY?,2#` (释放) |
|
|
|
+| 0x40 | `@` | 按键12 (取消防水按钮) | 取消防水功能 | `$KEY@,1#` (按下), `$KEY@,2#` (释放) |
|
|
|
+| 0x38 | `8` | 按键14 | 通用功能 | `$KEY8,1#` (按下), `$KEY8,3#` (长按) |
|
|
|
+| 0x30+HI_BYTE(prm) | 取决于高字节 | 其他按键 | 根据不同按键有不同功能 | 取决于具体按键值 |
|
|
|
+
|
|
|
+#### 状态:
|
|
|
+| 值 | 描述 |
|
|
|
+|-----|------------|
|
|
|
+| 1 | 按下 |
|
|
|
+| 2 | 释放 |
|
|
|
+| 3 | 长按 |
|
|
|
+
|
|
|
+### 3.2 设备ID消息 (ID)
|
|
|
+格式: `$ID,[ID号],1#`
|
|
|
+
|
|
|
+此消息用于上报设备唯一序列号(设备ID)。
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | ID号 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | ID | , | xxxxxxxxxx | 1 | # |
|
|
|
+
|
|
|
+说明:设备唯一序列号由15个数字字母组成。
|
|
|
+
|
|
|
+示例消息:`$ID,WDFJKEY12345678,1#`
|
|
|
+
|
|
|
+### 3.3 版本信息消息 (V)
|
|
|
+格式: `$V,[版本信息]F#`
|
|
|
+
|
|
|
+此消息用于上报设备版本信息。
|
|
|
+
|
|
|
+发送时机:收到心跳包后MCU上报Android。
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 版本号(15个字节) | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | V | , | 硬件版本HV+软件版本SV+日期 | F-数据字符 | # |
|
|
|
+
|
|
|
+说明:版本信息包含硬件版本(HV)、软件版本(SV)和日期信息,总共15个字节。F为固定结尾标记。
|
|
|
+
|
|
|
+示例消息:`$V,HV01SV02220630F#`
|
|
|
+
|
|
|
+## 4. MCU接收消息类型
|
|
|
+
|
|
|
+MCU可以识别并处理以下来自上位机的命令:
|
|
|
+
|
|
|
+### 4.1 心跳命令 (HEART)
|
|
|
+格式: `$HEART,1E#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 随机数 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | HEART | , | 1 | E | # |
|
|
|
+
|
|
|
+说明:心跳包,用于保持连接。要求Android每5秒内发送1次。若MCU在10秒内没有收到信号,将自动重启Android。<font color="red">仅对3128安卓核心版有效</font>
|
|
|
+
|
|
|
+### 4.2 系统重置命令 (SYSRESET)
|
|
|
+格式: `$SYSRESET,2D#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 随机数 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | SYSRESET | , | 2 | D | # |
|
|
|
+
|
|
|
+说明:触发安卓系统重启。
|
|
|
+
|
|
|
+### 4.3 系统升级命令 (SYSUPDATE)
|
|
|
+格式: `$SYSUPDATE,3C#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 随机数 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | SYSUPDATE | , | 3 | C | # |
|
|
|
+
|
|
|
+说明:进入系统ROM升级模式。
|
|
|
+
|
|
|
+### 4.4 麦克风控制命令 (MIC)
|
|
|
+格式: `$MIC,0F#` 或 `$MIC,1F#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | MIC | , | 0或1 | F-数据 | # |
|
|
|
+
|
|
|
+说明:控制麦克风开关状态,0表示关闭麦克风,1表示打开麦克风。
|
|
|
+
|
|
|
+### 4.5 分机护理灯LED控制命令 (NLED)
|
|
|
+格式: `$NLEDn,RRGGBBF#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | R | G | B | 校验符 | 结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|------------|------------|
|
|
|
+| $ | NLEDn | , | 00-99 | 00-99 | 00-99 | F | # |
|
|
|
+
|
|
|
+说明:护理灯控制命令,n表示护理灯索引号(0-4),00-99表示该颜色的亮度。
|
|
|
+
|
|
|
+### 4.6 卫生间紧急按钮呼叫LED命令 (ULED)
|
|
|
+格式: `$ULED,0F#`、`$ULED,1F#`或`$ULED,2F#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | ULED | , | 0:关闭<br>1:打开<br>2:闪烁 | F-数据 | # |
|
|
|
+
|
|
|
+说明:卫生间呼叫灯控制命令,用于控制卫生间呼叫灯的状态。
|
|
|
+
|
|
|
+### 4.7 继电器控制命令 (RELAY)
|
|
|
+格式: `$RELAYn,0F#`或`$RELAYn,1F#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | RELAYn | , | 0:关闭<br>1:打开 | F-数据 | # |
|
|
|
+
|
|
|
+说明:继电器控制命令,n为0-2,表示继电器索引号,门禁序号0。
|
|
|
+
|
|
|
+### 4.8 SIP状态设置命令
|
|
|
+格式: `$SIP,01#`、`$SIP,11#`或`$SIP,21#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据字符 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | SIP | , | 0:注册失败<br>1:注册中<br>2:注册成功 | 1 | # |
|
|
|
+
|
|
|
+说明:当前SIP协议状态命令,用于设置或查询网络SIP协议的注册状态。
|
|
|
+
|
|
|
+### 4.9 ID查询命令 (ID)
|
|
|
+格式: `$ID,11#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据字符 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | ID | , | 1 | 1 | # |
|
|
|
+
|
|
|
+说明:请求设备返回唯一序列号(设备ID),设备将以3.2节中描述的格式返回ID信息。
|
|
|
+
|
|
|
+### 4.10 门灯控制命令 (DOORLED)
|
|
|
+格式: `$DOORLED,RGBF#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | R | G | B | 校验符 | 结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|------------|------------|
|
|
|
+| $ | DOORLED | , | 0或1或2 | 0或1或2 | 0或1或2 | F-数据 | # |
|
|
|
+
|
|
|
+说明:门灯控制命令,用于控制门灯的RGB三色状态。0表示灯灭,1表示常亮,2表示闪烁。
|
|
|
+
|
|
|
+### 4.11 呼叫和通话状态命令 (CALL)
|
|
|
+格式: `$CALL,0F#`、`$CALL,1F#`或`$CALL,2F#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据内容 | 校验符 | 结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | CALL | , | 0或1或2 | F-数据 | # |
|
|
|
+
|
|
|
+说明:呼叫和通话状态命令,用于指示当前呼叫状态。0表示挂断,1表示正在呼叫,2表示通话中。
|
|
|
+
|
|
|
+### 4.12 MCU版本查询 (ASK)
|
|
|
+格式: `$ASK,IDF#`或`$ASK,VNF#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据内容 | 校验符 | 结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | ASK | , | ID或VN | F-数据 | # |
|
|
|
+
|
|
|
+说明:MCU版本请求命令,用于查询设备信息。ID表示请求设备ID;VN表示请求MCU版本序号。
|
|
|
+
|
|
|
+### 4.13 网卡断电重启命令 (NETRESET)
|
|
|
+格式: `$NETRESET,1F#`或`$NETRESET,0F#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据内容 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | NETRESET | , | 1:断电 | F-数据 | # |
|
|
|
+
|
|
|
+说明:网卡断电重启命令,用于控制网卡电源。数据内容为1,输出高电平复位;0,输出低电平取消复位。
|
|
|
+
|
|
|
+### 4.14 功能板在线检测控制命令 (OLCHECK)
|
|
|
+格式: `$OLCHECK,0F#`或`$OLCHECK,1F#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 分隔符 | 数据内容 | 校验符 | 报文结束符 |
|
|
|
+|-----|--------|------------|------------|------------|------------|
|
|
|
+| $ | OLCHECK | , | 0:禁用<br>1:启用 | F-数据 | # |
|
|
|
+
|
|
|
+说明:在线检测命令,用于设置是否启用在线检测功能。0表示禁用,1表示启用。
|
|
|
+
|
|
|
+### 4.15 功能板版本查询命令 (VERSION)
|
|
|
+格式: `$VERSION#`
|
|
|
+
|
|
|
+| 报文头 | 命令 | 报文结束符 |
|
|
|
+|-----|--------|------------|
|
|
|
+| $ | VERSION | # |
|
|
|
+
|
|
|
+说明:获取功能板版本号
|
|
|
+
|
|
|
+## 5. 特殊功能说明
|
|
|
+
|
|
|
+### 5.1 在线检测功能
|
|
|
+当开启在线检测功能(`olcheck_enable`=1)时,系统会定期检查设备状态:
|
|
|
+- PB0引脚:60秒未检测到方波时,发送`$KEY6,4#`;检测到方波时,发送`$KEY6,3#`
|
|
|
+- PA8引脚:10秒未检测到方波时,发送`$KEY7,4#`;检测到方波时,发送`$KEY7,3#`
|
|
|
+
|
|
|
+### 5.2 按键组合功能
|
|
|
+同时按下PB1和PB0按键时,会触发"拔针"功能,消息示例:
|
|
|
+- 按下拔针组合键:`$KEY?,1#`
|
|
|
+- 释放拔针组合键:`$KEY?,2#`
|
|
|
+- 长按拔针组合键:`$KEY?,3#`
|
|
|
+
|
|
|
+## 6. 附录:消息流程示例
|
|
|
+
|
|
|
+### 设备启动过程
|
|
|
+1. 设备初始化硬件
|
|
|
+2. 等待上位机连接
|
|
|
+3. 上位机发送`$HEART#`心跳检测
|
|
|
+4. 设备响应处理
|
|
|
+
|
|
|
+### 按键按下流程
|
|
|
+1. 用户按下按键
|
|
|
+2. MCU检测按键状态变化
|
|
|
+3. 生成按键消息:`$KEY[按键值],1#`
|
|
|
+4. 通过UART发送到上位机
|
|
|
+
|
|
|
+### 按键释放流程
|
|
|
+1. 用户释放按键
|
|
|
+2. MCU检测按键状态变化
|
|
|
+3. 生成按键消息:`$KEY[按键值],2#`
|
|
|
+4. 通过UART发送到上位机
|
|
|
+
|
|
|
+### 版本查询流程
|
|
|
+1. 上位机发送版本查询命令:`$VERSION#`
|
|
|
+2. MCU解析命令
|
|
|
+3. 生成版本信息响应:`$V,[版本号]F#`
|
|
|
+4. 通过UART发送到上位机
|