手环典型业务场景 - 交互模拟
STC32G12K128
QFN-32 封装引脚图
点击引脚查看逻辑连线
1. 核心架构设计思想:单向依赖与分层抽象
手环固件基于经典的 **三层单向依赖架构**(APP层 -> DRV层 -> HW层)进行设计:
- 硬件隔离:不允许应用层代码绕过驱动去改变硬件寄存器。所有的引脚操作都封装在 DRV 层内。这为手环的软硬件升级(如屏幕升级、传感器类型增加)提供了极佳的移植性。
- 单向无环依赖:数据的向上汇报只能通过全局变量/事件队列异步进行,应用层向下发起硬件动作通过高级函数 API 进行,避免了组件之间的紧耦合与死锁。
2. 高可靠性按键环形事件缓冲队列 (Ring Buffer)
为了避免用户在快速点击或同时按下多个按键时发生丢键,KEY 驱动中建立了一个深度为 4 级的环形事件队列。
Timer 1 中断(每 10ms 扫描消抖一次)把有效的短按、长按事件直接 `Push` 进入队列;主循环在空闲时通过 `Pop` 处理并重置队列,从而彻底消除了阻塞死等消抖(如 `while(key==0)`)的低效设计。
3. 报警指示非阻塞异步时序设计
由于马达震动(例如 300ms)和 LED 闪烁是长达数百毫秒的时序动作,如果采用软件阻塞延时(如 `delay_ms(300)`),主循环将完全卡死,无法处理 LR690L 433MHz 高频射频接收。
手环将马达和 LED 动作拆分为多个维持电平段,在 Timer1 的时钟中断中不断自减维持时间,当计数归零时自动切换引脚状态:
4. 安全唤醒重初始化时序
手环在低功耗休眠时,为了消除 Truly AMOLED 屏幕的暗漏电流,使用 `P2.7`(SGM3833 PMIC 使能脚)切断了 OLED 屏幕的逻辑及负压电源供电。
在被外部中断(按键按下或 LR690L 接收沿)瞬间唤醒后,由于电源滤波电容充电需要时间,电网在最初的几十毫秒是不稳定的。因此,唤醒后**严禁立即进行写屏操作**,必须遵循严格的唤醒初始化序列:
- 1. 唤醒 CPU,立即拉高 `SHUT = 1` 使能 SGM3833 启动。
- 2. **软件强行阻塞延时延时 50ms**,保证电压完全稳定并避开浪涌冲击电流。
- 3. 重新对 RM69310 屏幕控制器写入全套初始化指令配置(建立 SPI 像素写通道)。
- 4. 触发屏幕重绘,亮起时钟页。