Files
stc32g128k/Docs/walkthrough.md

74 lines
5.5 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.

# STC32G 手环项目工程与功能实现 Walkthrough
本项目完成了手环核心交互逻辑与状态机的所有开发,并特别针对新引入的 FCOB-2.7 规格 RGB 灯条进行了高精度的硬件驱动级重构。
## 实现功能摘要
### 1. 法语 UI 语言包支持 (French-Only UI)
* **全界面翻译**:手环所有的 UI 屏幕显示内容均已替换为法语。
* **界面排版优化**:考虑到法语单词通常较长,所有中法文映射后的短语长度均严格限制在 120 像素宽的 OLED 屏幕边界内(每行最大 15 个字符),并通过调整绘图坐标和排版(如 "DESARME" 解锁图标与文字的 X 坐标微调),确保显示效果居中且不发生重叠。
* `WATCH``MONTRE`
* `ARMED``ARME`
* `DISARM``DESARME`
* `PAIR MENU``MENU APPAI.`
* `DOOR SENSOR``DETEC. PORTE`
* `PIR MOTION``DETEC. PIR`
* `SMOKE DETECT``DETEC. FUMEE`
* `GAS LEAK``DETEC. GAZ`
* `WATER FLOOD``DETEC. EAU`
* `SEARCHING...``RECHERCHE...`
* `TRIGGER SENSOR``DECLENCH. CAPT`
* `CODE FOUND``CODE TROUVE`
* `HOLD SOS TO SAVE``MAINTENIR SOS`
* `PAIR SUCCESS``SUCCES APPAI.`
* `PAIR TIMEOUT``DELAI DEPASSE`
* `NO SIGNAL FOUND``AUCUN SIGNAL`
* `PAIR FAILED``ECHEC APPAI.`
* `TYPE MISMATCH``TYPE INCORRECT`
* `EMIT SOS``SOS EMIS`
* `BAND TRIGGERED``BRACELET ACTIF`
* `BINDING IPC``LIAISON IPC`
* `TRANSMITTING...``ENVOI EN COURS`
### 2. 硬件 SPI 控制 FCOB-2.7 幻彩 RGB 灯条
为了实现对 FCOB-2.7 灯条的高精度和无毛刺控制,我们将传统的软件延时 Bit-bang 方式重构为了基于**硬件 SPI** 的信号调制驱动:
* **引脚定义**
* 使用 `P_SW1 = 0x04` 将 SPI 引脚重定向到 `P2.2` (SS)、`P2.3` (MOSI)、`P2.4` (MISO)、`P2.5` (SCLK)。
* `P2.3` (MOSI) 作为信号线连接到 FCOB 灯条的 DIN 端。
* **时序匹配算法**
* 根据规格书提供的精密参数T0H = 0.295μs, T0L = 0.595μs, T1H = 0.595μs, T1L = 0.295μs设置 SPI 时钟为 `SYSCLK / 8 = 3.0 MHz`,每一个 SPI 比特宽度刚好为 `333.3ns`
* 采用 **3-bit 编码**
* **0 码**`100` 二进制High: 333ns, Low: 667ns与规格书的 295ns / 595ns 极为吻合。
* **1 码**`110` 二进制High: 667ns, Low: 333ns与规格书的 595ns / 295ns 极为吻合。
* 由于 3-bit 乘以 24 位刚好是 72 比特(即 9 字节),数据可以完美对齐成一个 9 字节的缓冲区。通过预编码与快速写入,消除了传统 SPI 循环中由于 CPU 运算延迟产生的 byte-to-byte 间隔,从根本上防止了灯条把传输间隔误识别为复位信号(这也是之前全白灯的原因)。
* **硬件冲突规避设计**
* 由于 `P2.5` 是 SCLK 且物理上连接了马达,在 SPI 发送数据时,高频时钟会导致马达杂音或微动。
* 我们在此次重构中设计了**双向模式临时切换机制**:在开始发送数据前,将 `P2.5` 配置为高阻输入模式(禁用硬件驱动器输出);当 24 位数据发送完毕并执行复位(将 P2.3 拉低 100μs立即关闭 SPI 并将 `P2.5` 恢复为推挽输出模式。
* 整个 SPI 发送期间关闭中断(`EA=0`),从而实现马达与 RGB 灯条在物理引脚共享上的完美隔离。
### 3. 自适应射频解码兼容性
* 重构为**基于电平比例的自适应解码算法**。放宽绝对微秒窗口限制,通过低/高电平比例15~48倍基准为31倍自动识别 EV1527 帧并解析数据。
### 4. 严格匹配要求的按键与事件交互逻辑
* **进入配对菜单**:在待机模式下,同时长按 `▲` + `▼` 3秒进入传感器类型选择菜单。
* **进入对码搜索 (Pair Wait)**:在菜单中选择好类型后,短按 `SOS` 确认,此时触发 1 次 100ms 短振确认,且 LED 开启白色快闪3Hz进入雷达扫描信号接收。
* **主动呼救 (Emit SOS)**:在待机模式下,短按 `SOS` 键,立刻切入求救模式并开始向外循环发射 433MHz 警报信号。
* **IPC 对码绑定**:在待机模式下,长按 `SOS` 键 5秒显示 BINDING IPC 页面,向外发射 1 次 433MHz 绑定信号(数据码为 0x01维持 2 秒后自动返回待机。
* **解除求救模式**在求救模式下长按任意一个按键UP、DOWN 或 SOS即可主动解除警报退回时钟待机。
### 5. 不接收/解析他人 SOS 广播
* 手环只对已经配对存储在内部数据库门磁、PIR、烟感、燃气、水浸的传感器 ID 触发报警。
* 防区轮询解码时客观过滤并排除 SOS 信号的被动接收。
### 6. 电池百分号显示修复与坐标复原
* **字模基线对齐**:将 `%` 字符0x25的字模数据在 8x16 矩阵中向上平移 2 像素,使其与前面的数字处于同一水平基准线。
* **坐标优化防重合**:将电池图标右移至 `X=92, Y=27`,电量百分比置于 `X=62, Y=24`。二者之间保留 6 像素间距,既美观又完美杜绝了贴合与重叠问题。
## 编译与 Git 仓库同步信息
* **编译器**Keil C251 V5.60.0.0
* **编译输出目标**`Build\wristband.hex`
* **编译状态**0 Errors, 3 Warnings
* **Program Size**data=105.0, edata+hdata=351, xdata=370, const=1648, code=14237
* **Git 仓库地址**`https://dev.xtell.cn/zouhaitao/stc32g128k.git`