Files
stc32g128k/Docs/30_architecture/main.md

76 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 架构设计 (docs/30_architecture/main.md)
本章节阐述手环的硬件拓扑、引脚分配、软件状态机设计、IAP Flash 数据库存储设计以及低功耗待机机制。
## 1. 硬件规格与引脚映射
主控芯片采用 **STC32G12K128** 单片机(工作频率 24.0 MHz单周期 8051 内核32位乘除法器
### 1.1 GPIO 引脚配置表
| 引脚号 | 引脚定义 | 模式配置 | 物理外设与功能说明 |
| :--- | :--- | :--- | :--- |
| **P2.3** | `WS2812_DI` | 双向/SPI MOSI | 连接 FCOB-2.7 幻彩 RGB 灯条的 DIN 信号输入 |
| **P2.5** | `MOTOR` | 推挽输出/SCLK | 连接振动马达驱动电路。高电平震动,低电平静止 |
| **P0.1** | `KEY_UP` | 高阻输入+上拉 | 物理按键 SW1 (▲),按下为低电平 |
| **P0.2** | `KEY_SOS` | 高阻输入+上拉 | 物理按键 SW3 (SOS),按下为低电平 |
| **P0.3** | `KEY_DOWN` | 高阻输入+上拉 | 物理按键 SW2 (▼),按下为低电平 |
| **P1.0** | `SGM_CTRL` | 推挽输出 | SGM3833 电源使能。高电平使能输出正负 VELVDD & VAVDD |
| **P1.1** | `LCD_RST` | 推挽输出 | AMOLED 屏幕 RM69310 复位引脚 |
| **P1.3** | `LCD_RS` | 推挽输出 | AMOLED 屏幕 SPI 数据/命令寄存器选择 (D/C) |
| **P1.4** | `LCD_CS` | 推挽输出 | AMOLED 屏幕 SPI 片选信号 |
| **P1.5** | `LCD_SCL` | 推挽输出 | AMOLED 屏幕 SPI 时钟信号 |
| **P1.6** | `LCD_SDA` | 推挽输出 | AMOLED 屏幕 SPI 数据信号 |
| **P2.3** | `ADC3` | 模拟输入 | 电池电压采样输入端口 |
### 1.2 SPI 复用与马达防噪硬件规避设计
由于 `P2.5` 同时作为马达引脚和硬件 SPI 的 SCLK 引脚,为了避免在高频发送 24-bit 灯效数据时引脚电平抖动导致马达异常鸣叫:
1. **发送前**:调用 `EA = 0` 关闭总中断。临时将 `P2.5` 引脚配置为 **高阻输入模式**。此时 SCLK 输出时钟不会使马达导通。
2. **发送中**:通过硬件 SPI 直接串行写入 72 位转换数据24位 RGB 经过 LUT 展宽)。
3. **发送后**:将 `P2.5` 引脚改回 **推挽输出模式**。调用 `EA = 1` 开启中断,继续通过常规 IO 控制马达电平。
---
## 2. 核心软件业务状态机 (SystemState)
系统处于主循环中,根据事件和计数器在以下状态(`SystemState`)间迁移:
```mermaid
stateDiagram-v2
[*] --> STATE_NORMAL
STATE_NORMAL --> STATE_ARMED : 接收到布防广播
STATE_ARMED --> STATE_DISARMED : 接收到撤防广播
STATE_DISARMED --> STATE_NORMAL : 自动恢复/按键返回
STATE_NORMAL --> STATE_PAIR_MENU : ▲ + ▼ 长按 3 秒
STATE_PAIR_MENU --> STATE_PAIR_WAIT : 确认选中类型
STATE_PAIR_WAIT --> STATE_PAIR_CONFIRM : 捕获 433MHz 匹配数据
STATE_PAIR_CONFIRM --> STATE_PAIR_SUCCESS : 短按 SOS 保存
STATE_PAIR_CONFIRM --> STATE_PAIR_FAIL : 超时/按▼取消
STATE_PAIR_SUCCESS --> STATE_PAIR_MENU : 2秒后自动返回
STATE_PAIR_FAIL --> STATE_PAIR_MENU : 2秒后自动返回
STATE_NORMAL --> STATE_SOS_EMITTED : 短按 SOS
STATE_ARMED --> STATE_ALARMING : 捕获已配对传感器报警
STATE_ALARMING --> STATE_NORMAL : 按任意键/超时解除
STATE_SOS_EMITTED --> STATE_NORMAL : 长按任意键/超时解除
```
---
## 3. IAP Flash 传感器数据库设计
为了断电保存传感器配对信息,使用 STC32G 的 IAP 功能读写 Flash
* **扇区基地址**`0xFE0000` (末尾扇区)。
* **存储结构**`Sensor_Slot` 结构体:
```c
typedef struct {
u32 addr; // 24位射频硬件地址 (EV1527)
u8 type; // 传感器类型 (0: 门磁, 1: 红外, 2: 烟感, 3: 燃气, 4: 水浸)
u8 zone; // 防区类别 (0: 永久防区, 1: 普通可撤防区)
char name[16]; // 自定义法语防区名称
} Sensor_Slot;
```
* 一共支持 **16** 个传感器槽位,通过 `Load_Database()` 和 `Save_Database()` 进行统一序列化读写。