Bladeren bron

修改>和<按键值为 [和]

DESKTOP-34DQRNR\TJK 2 maanden geleden
bovenliggende
commit
7e535a0b18
4 gewijzigde bestanden met toevoegingen van 293 en 8 verwijderingen
  1. 24 0
      .gitignore
  2. 258 0
      MCU通讯协议说明.md
  3. 9 7
      source/user/mapp_arm.c
  4. 2 1
      说明.txt

+ 24 - 0
.gitignore

@@ -0,0 +1,24 @@
+# 忽略project文件夹
+project/
+/project/
+project/*
+
+# 忽略临时文件
+*.tmp
+*.bak
+*.swp
+
+# 忽略编译生成的文件
+*.o
+*.obj
+*.exe
+*.out
+*.dll
+*.so
+*.dylib
+
+# 忽略IDE配置文件
+.vscode/
+.idea/
+*.user
+*.suo 

+ 258 - 0
MCU通讯协议说明.md

@@ -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发送到上位机 

+ 9 - 7
source/user/mapp_arm.c

@@ -759,15 +759,17 @@ static void  s_frmArmTxKey(U16 prm)
 		
 	  if (HI_BYTE(prm)==8) {
 				*buf++ = 0x30+0x0b;
-    	} else if (HI_BYTE(prm)==9) {
-				*buf++ = 0x30+0x0c;
-    	}else  if (HI_BYTE(prm)==0xa) {
+    	} else if (HI_BYTE(prm)==9) { //发送 < 改成 发送]
+				//*buf++ = 0x30+0x0c;
+				*buf++ = 0x30+0x2d;
+    	}else  if (HI_BYTE(prm)==0xa) {//发送 = 
 				*buf++ = 0x30+0x0d;
-    	}else  if (HI_BYTE(prm)==0xb) {
-				*buf++ = 0x30+0x0e;
-    	} else  if (HI_BYTE(prm)==0xd) {
+    	}else  if (HI_BYTE(prm)==0xb) { //发送 > 改成 发送[
+				//*buf++ = 0x30+0x0e;
+				*buf++ = 0x30+0x2b;
+    	} else  if (HI_BYTE(prm)==0xd) {// 发送 ?
 				*buf++ = 0x30+0x0f;   //拔针 dwd231225
-    	}  else  if (HI_BYTE(prm)==0xc) {
+    	}  else  if (HI_BYTE(prm)==0xc) {//发送 @
 				*buf++ = 0x30+0x10;   //取消防水按钮 dwd240506
     	} else if (HI_BYTE(prm)==0xe){ //发送8
 				*buf++ = 0x30+0x08;

+ 2 - 1
说明.txt

@@ -2,4 +2,5 @@
       手柄:PB0按钮硬件新增了方波,通过检测方波实现手柄是否在线
       防水按钮:PA7使用了常闭的开关,通过检测按钮是否处于一直常开状态实现防水按钮是否在线的状态检测
 2. 20250207 延迟20s 启动功能板,否则在志和安卓板的串口1上发送数据直接导致安卓系统无法启动。原因是志和安卓板串口1是调试口,需要等系统起来后设置为串口。
-3. 20250209 取消延迟启动,增加控制协议 $OLCHECK,1F# 开启离线消息上报, $OLCHECK,0F# 关闭离线消息上报。$VERSION# 获取功能板版本号
+3. 20250209 取消延迟启动,增加控制协议 $OLCHECK,1F# 开启离线消息上报, $OLCHECK,0F# 关闭离线消息上报。$VERSION# 获取功能板版本号
+4. 20250418 由于新板按键位置错误,为兼容新旧板按键消息,把当前板子的按键消息的> 改成 [,< 改成].