85 lines
7.6 KiB
Markdown
85 lines
7.6 KiB
Markdown
# STC32G手环系统开发总结及开发计划
|
||
|
||
本项目基于STC32G12K128单片机,驱动信利AM010RT10206V0(AMOLED屏幕,控制芯片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_Fosc(24MHz)及掉电保存 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%` 剩余容量百分比动态输出到屏幕顶端,取代目前的静态电量指示。
|