Files
stc32g128k/Docs/wristband_project_doc.md

85 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# STC32G手环系统开发总结及开发计划
本项目基于STC32G12K128单片机驱动信利AM010RT10206V0AMOLED屏幕控制芯片RM69310与SGM3833电源芯片实现了手环UI显示系统、按键消抖状态机、自适应射频解调和防区报警功能。
---
## 一、 已完成功能与代码实现总结
### 1. 硬件电源与驱动层修复
* **SGM3833电源使能修复**:修复了原初始化流程中在 `LCD_Init()` 执行时拉低 `SGM_CTRL = 0` 的逻辑缺陷,改为保持高电平 `SGM_CTRL = 1` 使能,保证屏幕所需的 ±VELVDD 正负压与 VAVDD 稳定输出。
* **字模基线与显示优化**:修复了 `Drivers/lcd_font.h``%` 字符(索引 0x25的混乱点阵字模将其在 8x16 矩阵中向上平移 2 像素对齐数字基线;并重构了电量显示坐标(电池图标 `X=92, Y=27`,电量百分比 `X=62, Y=24`),确保两器件拥有 6 像素的安全间距,完美杜绝字符乱码与重合。
* **屏幕无闪烁刷新**:重构了状态重绘屏刷新机制,去除了主循环开头强制清除重绘标记的 Bug改在 Redraw 块内清零;使得手环可以在捕获到对码信号的瞬间,立刻跳转到“对码确认”页面,不再卡顿于雷达搜索 UI。
### 2. 射频解码性能重构(遥控器配对失败修复)
* **自适应时序算法**:抛弃了原先微秒级死宽度的硬编码限制(高电平放宽至 `50~2500us`,低电平放宽至 `1500~60000us`),改用低电平与高电平的时间比值(范围 `15``48` 倍,以 31 倍为基准)自动解调。自适应计算时钟基准 `T = low_time / 31`支持匹配任意振荡电阻150K至4.7M)的遥控器与探测器。
* **CPU效率优化**:移除了接收抓包过程中 24 行脉冲宽度的串口阻塞式打印,将串口输出缩减到一行解码 Summary使得单帧解析时间从 62.6ms 降至 2ms 以下,杜绝了多帧连续发射造成的丢包问题。
### 3. 按键与事件响应体系(完全匹配说明书)
* **待机状态控制**
* **同时长按 ▲+▼ 3秒**:进入配对类型选择菜单。
* **短按 SOS**:进入本机紧急呼救模式(`STATE_SOS_EMITTED`),背景循环发射 433MHz 警报信号。
* **长按 SOS 5秒**:触发 IPC 摄像机对码绑定,屏幕显示 `BINDING IPC` 并发射一次对码广播(数据码 `0x01`2秒后自动退回时钟。
* **求救解除**在求救模式下长按任意一个物理按键UP, DOWN 或 SOS即可重置状态并安全退回时钟页面。
* **屏蔽 SOS 被动报警**只允许门磁、PIR、烟感、燃气、水浸类型 0~4等传感器配对并触发被动防区报警强行过滤并排除 SOS 求救广播的被动接收,防止手环之间产生误报环路。
### 4. 外设控制与声光电反射矩阵Timer1 ISR 中断实现)
* **求救模式**LED 红色以 5Hz 极速闪烁;马达以 1200ms 长振循环(振动 1000ms静止 200ms不间断工作。
* **对码模式**
* 对码中LED 始终保持 **白色快闪3Hz**
* 对码成功LED **绿色常亮 2 秒**,马达 **强震 1 次400ms**,随后恢复时钟。
* 对码超时/失败LED **红色快闪 3 次**,马达 **双击快震100ms+100ms**
* **防区触发告警模式5秒循环特定声光组合**
* *门磁/窗磁*LED 红色常亮,马达 1 次短振 300ms。
* *人体红外*普通防区LED 黄色,马达 2 次短振 300ms间隔 200ms
* *烟雾探测*24h防区LED 绿色,马达 3 次短振 200ms间隔 150ms
* *气体泄漏*24h防区LED 紫色,马达 4 次短振 200ms间隔 100ms
* *水浸溢出*24h防区LED 黄色,马达 2 次长振 600ms间隔 300ms
### 5. 联调仿真交互层(免焊接外设调试)
* **仿真指令注入**:支持通过电脑串口发送特定按键符号(`u/U`, `d/D`, `s/S`, `c`)模拟短按、长按、双键组合;发送 `'a'` 仿真门磁触发;发送 `'p'` 仿真对码接收。
* **仿真状态改变输出**:在主循环中实时跟踪 LED 及 MOTOR 端口的电平跳变,并在串口实时输出其状态变化日志(例如 `[STATE] LED status -> R:1 G:0 B:0`),便于逻辑排查。
* **状态切换模拟**:增加 `'1'``'2'``'3'` 串口指令,可人为强制手环分别在 NORMAL常态、ARMED布防、DISARMED撤防状态间任意切换解决了由于按键复用导致无法手动布防普通防区门磁/红外)进行报警测试的问题。
---
## 二、 工程代码文件 Landscape
手环端的主体源文件与职责划分如下:
1. **[App/main.c](file:///c:/workfile/105/stc32g12k128/App/main.c)**
* 系统业务状态机核心与 `main` 主循环。
* `Timer1_Isr` 1ms 定时器中断服务(处理软件 RTC、按键消抖/长按/组合判定、LED 与马达闪烁波形生成)。
* 对码列表数据库操作配对防区存储与加载、IAP 写 Flash 与读取)。
* UI 页面整体渲染与局部更新逻辑。
2. **[App/config.h](file:///c:/workfile/105/stc32g12k128/App/config.h)**
* 公用数据结构(`Sensor_Slot`)与枚举变量(`SystemState``KeyEvent`)声明。
* MAIN_Fosc24MHz及掉电保存 IAP 扇区基地址(`0xFE0000`)。
3. **[Drivers/rf.c](file:///c:/workfile/105/stc32g12k128/Drivers/rf.c) / [rf.h](file:///c:/workfile/105/stc32g12k128/Drivers/rf.h)**
* LR690L 接收芯片与 LT4455 发射芯片的 GPIO 初始化及模式控制。
* 自适应 EV1527 软件解码(`EV1527_Decode`)与主动发射(`EV1527_Transmit`)。
4. **[Drivers/lcd.c](file:///c:/workfile/105/stc32g12k128/Drivers/lcd.c) / [lcd.h](file:///c:/workfile/105/stc32g12k128/Drivers/lcd.h)**
* AMOLED 屏幕 RM69310 的 SPI 写指令/写数据通道。
* SGM3833 脉冲波形发送。
* 底层写屏窗口X轴偏移4像素补偏与流式英文字符/单色位图绘制函数。
5. **[Drivers/lcd_font.h](file:///c:/workfile/105/stc32g12k128/Drivers/lcd_font.h)**
* 时钟所需的图标及对码成功/失败、报警图标字模数据。
* 标准的 8x16 ASCII 字模库。
---
## 三、 下一步开发任务计划
为使手环达到商用级产品水准,下一步开发计划如下:
* **1. 深度睡眠与超低功耗电源管理(最高优先级)**
* **屏幕休眠**:在无按键操作 10 秒后,通过 SPI 发送 `0x10` 命令使 AMOLED 进入 Sleep同时拉低 `SGM_CTRL = 0` 关闭 SGM3833 的正负压输出。
* **单片机停机**:调用 `PD` 指令使单片机进入 Power-Down 停机状态。
* **外部中断唤醒**配置按键引脚P0.1, P0.2, P0.3)作为外部中断源唤醒单片机。
* **2. LR690L 间歇性接收Duty-Cycling低功耗优化**
* LR690L 正常工作下消耗 3.5mA 电流。使用定时器控制 `SHUT` 引脚,每 100ms 唤醒 10ms 进行载波监听检测,无载波时继续休眠 90ms实现接收功耗降低 80% 以上。
* **3. 主机射频时间广播同步RTC 自动校准)**
* 在被动接收中捕获 IPC 主机发送的特定同步帧(如数据码为 `0x09`),并提取时间信息自动校正 `current_hour``current_min`,保证时钟显示精准。
* **4. 电池 ADC 电量采样与电量计算模型**
* 配置 `P2.3`ADC3 通道)分压输入,读取电池电压,并建立锂电池放电曲线转换表,计算真实的 `0~100%` 剩余容量百分比动态输出到屏幕顶端,取代目前的静态电量指示。