diff --git a/Docs/30_architecture/wristband_architecture.html b/Docs/30_architecture/wristband_architecture.html new file mode 100644 index 0000000..1007894 --- /dev/null +++ b/Docs/30_architecture/wristband_architecture.html @@ -0,0 +1,1522 @@ + + + + + + STC32G 手环核心系统架构设计交互分析器 + + + + + + + +
+
+
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. 触发屏幕重绘,亮起时钟页。
  • +
+
+
+ +
+ + + + +