STC

STC32G手环系统核心架构交互分析器

Architect-Level Interactive Architecture Analyzer

应用逻辑层 (APP Layer) - 事件循环与状态流转
MainScheduler
主循环调度
SysStateMachine
核心业务状态机
SoftRTC
软件计时器
外设驱动层 (DRV Layer) - 底层驱动与硬件隔离
KEY
消抖与事件队列
RF
LR690L 编解码
PM
极低功耗管理
AMOLED
Truly 屏幕渲染
LED
WS2812B 幻彩
MOTOR
马达异步震动
硬件抽象与时基层 (HW Layer) - 底层外设控制器
Timer1
1ms 中断时基
GPIO
数字输入输出
ADC
12位电压采集
Flash
IAP 扇区存取

手环典型业务场景 - 交互模拟

STANDBY
步骤说明
[SYSTEM] 模拟器就绪,等待触发...

STC32G12K128

QFN-32 封装引脚图

点击引脚查看逻辑连线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

1. 核心架构设计思想:单向依赖与分层抽象

手环固件基于经典的 **三层单向依赖架构**(APP层 -> DRV层 -> HW层)进行设计:

  • 硬件隔离:不允许应用层代码绕过驱动去改变硬件寄存器。所有的引脚操作都封装在 DRV 层内。这为手环的软硬件升级(如屏幕升级、传感器类型增加)提供了极佳的移植性。
  • 单向无环依赖:数据的向上汇报只能通过全局变量/事件队列异步进行,应用层向下发起硬件动作通过高级函数 API 进行,避免了组件之间的紧耦合与死锁。

2. 高可靠性按键环形事件缓冲队列 (Ring Buffer)

为了避免用户在快速点击或同时按下多个按键时发生丢键,KEY 驱动中建立了一个深度为 4 级的环形事件队列。

#define KEY_BUF_SIZE 4 volatile KeyEvent key_event_buf[KEY_BUF_SIZE]; volatile u8 key_buf_head = 0; volatile u8 key_buf_tail = 0; bit Key_Push_Event(KeyEvent evt) { u8 next = (key_buf_head + 1) % KEY_BUF_SIZE; if (next != key_buf_tail) { // 队列未满 key_event_buf[key_buf_head] = evt; key_buf_head = next; return 1; } return 0; // 溢出丢弃 }

Timer 1 中断(每 10ms 扫描消抖一次)把有效的短按、长按事件直接 `Push` 进入队列;主循环在空闲时通过 `Pop` 处理并重置队列,从而彻底消除了阻塞死等消抖(如 `while(key==0)`)的低效设计。

3. 报警指示非阻塞异步时序设计

由于马达震动(例如 300ms)和 LED 闪烁是长达数百毫秒的时序动作,如果采用软件阻塞延时(如 `delay_ms(300)`),主循环将完全卡死,无法处理 LR690L 433MHz 高频射频接收。

手环将马达和 LED 动作拆分为多个维持电平段,在 Timer1 的时钟中断中不断自减维持时间,当计数归零时自动切换引脚状态:

// MOTOR 异步闪烁时序示例 (在 10ms 中断服务中调用) void Motor_Pulse_Process(void) { if (motor_timer > 0) { motor_timer--; if (motor_timer == 0) { // 切换马达引脚电平,进入下一阶段 MOTOR_PIN = !MOTOR_PIN; // 根据特定的震动波形重新装填 motor_timer } } }

4. 安全唤醒重初始化时序

手环在低功耗休眠时,为了消除 Truly AMOLED 屏幕的暗漏电流,使用 `P2.7`(SGM3833 PMIC 使能脚)切断了 OLED 屏幕的逻辑及负压电源供电。

在被外部中断(按键按下或 LR690L 接收沿)瞬间唤醒后,由于电源滤波电容充电需要时间,电网在最初的几十毫秒是不稳定的。因此,唤醒后**严禁立即进行写屏操作**,必须遵循严格的唤醒初始化序列:

  • 1. 唤醒 CPU,立即拉高 `SHUT = 1` 使能 SGM3833 启动。
  • 2. **软件强行阻塞延时延时 50ms**,保证电压完全稳定并避开浪涌冲击电流。
  • 3. 重新对 RM69310 屏幕控制器写入全套初始化指令配置(建立 SPI 像素写通道)。
  • 4. 触发屏幕重绘,亮起时钟页。