手环典型业务场景 - 交互模拟
+ + +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. 触发屏幕重绘,亮起时钟页。 +