7.7 KiB
7.7 KiB
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
手环端的主体源文件与职责划分如下:
- App/main.c:
- 系统业务状态机核心与
main主循环。 Timer1_Isr1ms 定时器中断服务(处理软件 RTC、按键消抖/长按/组合判定、LED 与马达闪烁波形生成)。- 对码列表数据库操作(配对防区存储与加载、IAP 写 Flash 与读取)。
- UI 页面整体渲染与局部更新逻辑。
- 系统业务状态机核心与
- App/config.h:
- 公用数据结构(
Sensor_Slot)与枚举变量(SystemState、KeyEvent)声明。 - MAIN_Fosc(24MHz)及掉电保存 IAP 扇区基地址(
0xFE0000)。
- 公用数据结构(
- Drivers/rf.c / rf.h:
- LR690L 接收芯片与 LT4455 发射芯片的 GPIO 初始化及模式控制。
- 自适应 EV1527 软件解码(
EV1527_Decode)与主动发射(EV1527_Transmit)。
- Drivers/lcd.c / lcd.h:
- AMOLED 屏幕 RM69310 的 SPI 写指令/写数据通道。
- SGM3833 脉冲波形发送。
- 底层写屏窗口(X轴偏移4像素补偏)与流式英文字符/单色位图绘制函数。
- 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)作为外部中断源唤醒单片机。
- 屏幕休眠:在无按键操作 10 秒后,通过 SPI 发送
- 2. LR690L 间歇性接收(Duty-Cycling)低功耗优化:
- LR690L 正常工作下消耗 3.5mA 电流。使用定时器控制
SHUT引脚,每 100ms 唤醒 10ms 进行载波监听检测,无载波时继续休眠 90ms,实现接收功耗降低 80% 以上。
- LR690L 正常工作下消耗 3.5mA 电流。使用定时器控制
- 3. 主机射频时间广播同步(RTC 自动校准):
- 在被动接收中捕获 IPC 主机发送的特定同步帧(如数据码为
0x09),并提取时间信息自动校正current_hour与current_min,保证时钟显示精准。
- 在被动接收中捕获 IPC 主机发送的特定同步帧(如数据码为
- 4. 电池 ADC 电量采样与电量计算模型:
- 配置
P2.3(ADC3 通道)分压输入,读取电池电压,并建立锂电池放电曲线转换表,计算真实的0~100%剩余容量百分比动态输出到屏幕顶端,取代目前的静态电量指示。
- 配置