feat: implement high-precision hardware SPI driver for FCOB-2.7 RGB LED with motor pin conflict resolution
This commit is contained in:
124
App/main.c
124
App/main.c
@@ -87,6 +87,7 @@ char *code menu_items[5] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 本地函数前置声明
|
// 本地函数前置声明
|
||||||
|
void Delay10us(void);
|
||||||
void GPIO_Init(void);
|
void GPIO_Init(void);
|
||||||
void Timer1_Init(void);
|
void Timer1_Init(void);
|
||||||
u16 GetTimer0_Safe(void);
|
u16 GetTimer0_Safe(void);
|
||||||
@@ -127,100 +128,67 @@ void UI_ShowSosPage(void);
|
|||||||
* WS2812B 幻彩 LED 单线驱动函数 (24MHz 1T 模式下精准时序控制)
|
* WS2812B 幻彩 LED 单线驱动函数 (24MHz 1T 模式下精准时序控制)
|
||||||
* ========================================================================= */
|
* ========================================================================= */
|
||||||
|
|
||||||
|
const u16 code SPI_LUT[16] = {
|
||||||
|
0x924, 0x926, 0x934, 0x936, 0x9A4, 0x9A6, 0x9B4, 0x9B6,
|
||||||
|
0xD24, 0xD26, 0xD34, 0xD36, 0xDA4, 0xDA6, 0xDB4, 0xDB6
|
||||||
|
};
|
||||||
|
|
||||||
|
void WS2812_EncodeByte(u8 v, u8 *buf)
|
||||||
|
{
|
||||||
|
u16 p1 = SPI_LUT[v >> 4];
|
||||||
|
u16 p2 = SPI_LUT[v & 0x0F];
|
||||||
|
buf[0] = p1 >> 4;
|
||||||
|
buf[1] = ((p1 & 0x0F) << 4) | (p2 >> 8);
|
||||||
|
buf[2] = p2;
|
||||||
|
}
|
||||||
|
|
||||||
void WS2812_Write24Bit(u8 g, u8 r, u8 b)
|
void WS2812_Write24Bit(u8 g, u8 r, u8 b)
|
||||||
{
|
{
|
||||||
u8 i;
|
u8 xdata buf[9];
|
||||||
|
u8 m1_save, m0_save;
|
||||||
|
|
||||||
|
WS2812_EncodeByte(g, &buf[0]);
|
||||||
|
WS2812_EncodeByte(r, &buf[3]);
|
||||||
|
WS2812_EncodeByte(b, &buf[6]);
|
||||||
|
|
||||||
// 关全局中断,防止被其它高优先中断截断导致时序错乱
|
|
||||||
EA = 0;
|
EA = 0;
|
||||||
|
|
||||||
// 绿光通道 (Green)
|
m1_save = P2M1 & (1 << 5);
|
||||||
for (i = 0; i < 8; i++)
|
m0_save = P2M0 & (1 << 5);
|
||||||
{
|
|
||||||
if (g & 0x80)
|
|
||||||
{
|
|
||||||
// 发送 "1" 码:高电平维持 ~0.8us,低电平维持 ~0.4us
|
|
||||||
WS2812_DI = 1;
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
WS2812_DI = 0;
|
|
||||||
_nop_();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 发送 "0" 码:高电平维持 ~0.35us,低电平维持 ~0.9us
|
|
||||||
WS2812_DI = 1;
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
WS2812_DI = 0;
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_();
|
|
||||||
}
|
|
||||||
g <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 红光通道 (Red)
|
P2M1 |= (1 << 5);
|
||||||
for (i = 0; i < 8; i++)
|
P2M0 &= ~(1 << 5);
|
||||||
{
|
|
||||||
if (r & 0x80)
|
|
||||||
{
|
|
||||||
WS2812_DI = 1;
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
WS2812_DI = 0;
|
|
||||||
_nop_();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WS2812_DI = 1;
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
WS2812_DI = 0;
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_();
|
|
||||||
}
|
|
||||||
r <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 蓝光通道 (Blue)
|
SPCTL = 0xD1; // Enable SPI at SYSCLK/8 (3.0 MHz)
|
||||||
for (i = 0; i < 8; i++)
|
|
||||||
{
|
SPSTAT = 0xC0; SPDAT = buf[0]; while (!(SPSTAT & 0x80));
|
||||||
if (b & 0x80)
|
SPSTAT = 0xC0; SPDAT = buf[1]; while (!(SPSTAT & 0x80));
|
||||||
{
|
SPSTAT = 0xC0; SPDAT = buf[2]; while (!(SPSTAT & 0x80));
|
||||||
WS2812_DI = 1;
|
SPSTAT = 0xC0; SPDAT = buf[3]; while (!(SPSTAT & 0x80));
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
SPSTAT = 0xC0; SPDAT = buf[4]; while (!(SPSTAT & 0x80));
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
SPSTAT = 0xC0; SPDAT = buf[5]; while (!(SPSTAT & 0x80));
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
SPSTAT = 0xC0; SPDAT = buf[6]; while (!(SPSTAT & 0x80));
|
||||||
WS2812_DI = 0;
|
SPSTAT = 0xC0; SPDAT = buf[7]; while (!(SPSTAT & 0x80));
|
||||||
_nop_();
|
SPSTAT = 0xC0; SPDAT = buf[8]; while (!(SPSTAT & 0x80));
|
||||||
}
|
|
||||||
else
|
SPCTL = 0x90; // Disable SPI
|
||||||
{
|
WS2812_DI = 0;
|
||||||
WS2812_DI = 1;
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_();
|
P2M1 = (P2M1 & ~(1 << 5)) | m1_save;
|
||||||
WS2812_DI = 0;
|
P2M0 = (P2M0 & ~(1 << 5)) | m0_save;
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
||||||
_nop_(); _nop_(); _nop_();
|
|
||||||
}
|
|
||||||
b <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开全局中断
|
|
||||||
EA = 1;
|
EA = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812_Reset(void)
|
void WS2812_Reset(void)
|
||||||
{
|
{
|
||||||
|
SPCTL = 0x90;
|
||||||
WS2812_DI = 0;
|
WS2812_DI = 0;
|
||||||
// 维持低电平 100us 以上以完成数据锁存 (24MHz 计数约2400)
|
|
||||||
{
|
{
|
||||||
u16 cnt;
|
u8 i;
|
||||||
for (cnt = 0; cnt < 250; cnt++)
|
for (i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
_nop_();
|
Delay10us();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
Docs/FCOB-2.7-S01240-RGBXX-A-9W(5v 2.5ma)(2).pdf
Normal file
BIN
Docs/FCOB-2.7-S01240-RGBXX-A-9W(5v 2.5ma)(2).pdf
Normal file
Binary file not shown.
@@ -1,47 +1,51 @@
|
|||||||
# French Language & Addressable RGB LED (XL-2020RGBC-2812B) Implementation Plan
|
# 法语UI语言包与硬件SPI控制FCOB-2.7双模/单线幻彩RGB灯条实施计划书
|
||||||
|
|
||||||
## Goal Description
|
## 目标说明
|
||||||
Modify the wristband firmware to support **French-only UI display** and replace the discrete 3-pin LED control with the single-wire **addressable RGB LED (XL-2020RGBC-2812B)** protocol (WS2812B timing compatible).
|
修改手环固件,以支持**纯法语UI显示**,并将原本的单线Bit-bang驱动方式升级为通过**硬件SPI (引脚P2.3)** 控制 **FCOB-2.7(800kHz-1100kHz)** 单线自适应幻彩RGB灯条。
|
||||||
|
|
||||||
## User Review Required
|
## 关键技术点
|
||||||
> [!IMPORTANT]
|
|
||||||
> 1. **RGB LED (WS2812B) Control Pin**:
|
|
||||||
> The single-wire addressable RGB LED requires a high-speed bit-stream control pin (DIN).
|
|
||||||
> We will use the **P0.0 pin** (originally `LED_R` net) to drive the WS2812B DIN. P0.0 is already configured as a Push-Pull output.
|
|
||||||
> Pins `P2.7` (originally `LED_G`) and `P2.6` (originally `LED_B`) will be disabled (set to standard inputs or high logic).
|
|
||||||
> 2. **French Translations**:
|
|
||||||
> All UI strings will be replaced with French equivalents formatted to fit the 120-pixel wide OLED screen (max 15 characters per line).
|
|
||||||
|
|
||||||
## Open Questions
|
### 1. 硬件SPI引脚映射与冲突规避
|
||||||
None. The specifications are fully understood and mapping is direct.
|
* **引脚映射**:配置 `P_SW1 = 0x04` 将SPI引脚切换至第二组:
|
||||||
|
* `P2.2` -> SS (不使用)
|
||||||
|
* `P2.3` -> MOSI (连接到 FCOB 灯条的 DIN 引脚)
|
||||||
|
* `P2.4` -> MISO (不使用)
|
||||||
|
* `P2.5` -> SCLK (原本连接到振动马达 MOTOR)
|
||||||
|
* **马达引脚防抖/防噪处理**:
|
||||||
|
由于 `P2.5` 是 SCLK 且物理上连接了马达,为避免发送SPI信号时 SCLK 高频信号导致马达异常颤动或常亮:
|
||||||
|
* 在每次通过SPI写入24位RGB数据时,**临时将 P2.5 配置为高阻输入模式**(关闭引脚输出驱动能力),使 SCLK 信号无法物理输出到引脚。
|
||||||
|
* 数据发送完成后,**立即将 P2.5 恢复为推挽输出模式**,以确保正常的马达振动控制。
|
||||||
|
* 发送数据期间关闭总中断 `EA = 0`,以防时序被中断打断,发送完成后立即恢复 `EA = 1`。
|
||||||
|
|
||||||
## Proposed Changes
|
### 2. SPI传输速率计算与比特编码 (针对 FCOB-2.7 规格)
|
||||||
|
根据 FCOB-2.7 规格书:
|
||||||
|
* **T0H** (0码高电平): `0.295μs`
|
||||||
|
* **T0L** (0码低电平): `0.595μs`
|
||||||
|
* **T1H** (1码高电平): `0.595μs`
|
||||||
|
* **T1L** (1码低电平): `0.295μs`
|
||||||
|
* **Trst** (复位低电平): `> 80μs`
|
||||||
|
* 单码元周期: `0.295μs + 0.595μs = 0.89μs` (即 `1.12 MHz` 传输速率)。
|
||||||
|
|
||||||
### Hardware / Drivers
|
**设计方案**:
|
||||||
|
* **SPI时钟频率**:配置为 `SYSCLK / 8 = 3.0 MHz` (当系统时钟为24MHz时),对应的 SPI 每 bit 时间为 `333.3ns`。
|
||||||
|
* **码元表示**:使用 **3位 SPI bit** 表示一个 FCOB 码元(24位 RGB 数据对应 72位 SPI 数据,高阶位在前,正好等于 9个 字节):
|
||||||
|
* **0码**:SPI 编码为二进制 `100`。
|
||||||
|
* 高电平时间 = 1 bit * 333.3ns = `333ns` (与规格书 295ns 偏差仅 38ns)
|
||||||
|
* 低电平时间 = 2 bits * 333.3ns = `667ns` (与规格书 595ns 偏差仅 72ns)
|
||||||
|
* **1码**:SPI 编码为二进制 `110`。
|
||||||
|
* 高电平时间 = 2 bits * 333.3ns = `667ns` (与规格书 595ns 偏差仅 72ns)
|
||||||
|
* 低电平时间 = 1 bit * 333.3ns = `333ns` (与规格书 295ns 偏差仅 38ns)
|
||||||
|
* **复位信号**:禁用 SPI 模块,将 `P2.3` 强制拉低保持 `100μs`。
|
||||||
|
|
||||||
#### [MODIFY] [lcd_font.h](file:///c:/workfile/105/stc32g12k128/Drivers/lcd_font.h)
|
### 3. 法语界面翻译
|
||||||
No change needed for font, but we might include character translations if custom accent characters were needed. Since we use standard French without accents (like "ARME" instead of "ARMÉ") to avoid custom font complexity, no changes to `lcd_font.h` are required.
|
* 已完成所有界面显示内容的法语汉化工作,在 120x240 OLED 屏幕上自适应排版。
|
||||||
|
|
||||||
### Application Logic
|
## 验证方案
|
||||||
|
|
||||||
#### [MODIFY] [main.c](file:///c:/workfile/105/stc32g12k128/App/main.c)
|
### 自动化编译测试
|
||||||
1. **Redefine LED output**:
|
* 使用 Keil C251 重新编译项目,验证代码无报错(0 Errors)。
|
||||||
- Redefine `LED_R`, `LED_G`, `LED_B` as virtual/soft registers (`bit` variables). This allows the current logic in `Timer1_Isr` (which computes blink rates, colors, and vibrations) to remain 100% unchanged.
|
|
||||||
2. **Implement WS2812B bit-bang driver**:
|
|
||||||
- Write a precise assembly/C bit-bang function `WS2812_Write24Bit(u8 g, u8 r, u8 b)` that drives `P0.0` (DIN) with the correct WS2812 high-speed timing (typical `T0H = 0.35us`, `T0L = 0.9us`, `T1H = 0.8us`, `T1L = 0.4us`).
|
|
||||||
- Implement `WS2812_Reset()` by holding DI low for `>80us` to latch data.
|
|
||||||
3. **Trigger RGB updates**:
|
|
||||||
- At the end of `Timer1_Isr` (or during main loop), monitor changes to the virtual `LED_R`, `LED_G`, `LED_B` variables. If any changes are detected, output the 24-bit color to the WS2812 LED using the bit-bang driver.
|
|
||||||
4. **French UI Translation**:
|
|
||||||
- Translate all string literals displayed on the screen into French (e.g. menu items, sensor default names, and system state texts).
|
|
||||||
|
|
||||||
## Verification Plan
|
### 硬件测试
|
||||||
|
* 烧录最新的 Hex 固件,利用串口命令进行 RGB 灯控制测试。
|
||||||
### Automated Tests
|
* 观察 FCOB-2.7 灯条是否正常亮起相应颜色(红、绿、蓝、黄、紫、青、白)。
|
||||||
- Build code with Keil C251 to ensure 0 compile/link errors.
|
* 确认在发送控制数据时马达没有产生误动作或噪鸣。
|
||||||
|
|
||||||
### Manual Verification
|
|
||||||
- Test using UART simulation commands:
|
|
||||||
- Verify that the simulated LED output in the serial log shows correct R/G/B status changes for different states.
|
|
||||||
- Verify that French strings are printed correctly on the screen simulator or display.
|
|
||||||
- Test pairing, confirmation, alarm, and SOS states to verify correct RGB LED color outputs.
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# STC32G 手环项目工程与功能实现 Walkthrough
|
# STC32G 手环项目工程与功能实现 Walkthrough
|
||||||
|
|
||||||
本项目完成了手环核心交互逻辑与状态机的全部实现。所有代码已完全用中文进行行级注释,且在 Keil C251 下编译成功(0 Errors)。
|
本项目完成了手环核心交互逻辑与状态机的所有开发,并特别针对新引入的 FCOB-2.7 规格 RGB 灯条进行了高精度的硬件驱动级重构。
|
||||||
|
|
||||||
## 实现功能摘要
|
## 实现功能摘要
|
||||||
|
|
||||||
@@ -30,14 +30,24 @@
|
|||||||
* `BINDING IPC` ➔ `LIAISON IPC`
|
* `BINDING IPC` ➔ `LIAISON IPC`
|
||||||
* `TRANSMITTING...` ➔ `ENVOI EN COURS`
|
* `TRANSMITTING...` ➔ `ENVOI EN COURS`
|
||||||
|
|
||||||
### 2. 单线制幻彩 RGB LED (XL-2020RGBC-2812B) 驱动集成
|
### 2. 硬件 SPI 控制 FCOB-2.7 幻彩 RGB 灯条
|
||||||
* **物理层引脚映射**:使用原 `LED_R` 所属引脚 `P0.0` 作为单线数据输入(DIN)引脚,将其配置为高速推挽输出。在系统初始化时主动输出熄灭状态,防止上电乱闪。
|
为了实现对 FCOB-2.7 灯条的高精度和无毛刺控制,我们将传统的软件延时 Bit-bang 方式重构为了基于**硬件 SPI** 的信号调制驱动:
|
||||||
* **精准 Bit-bang 驱动**:根据 `XL-2020` 的 800Kbps 时序规范(1T cycle ≈ 41.67ns @ 24MHz),实现了毫微秒级别的 `WS2812_Write24Bit(u8 g, u8 r, u8 b)` 与 `WS2812_Reset()` 软件驱动。在发送数据流时,关闭总中断 `EA = 0`,确保脉冲宽度不被中断打断。
|
* **引脚定义**:
|
||||||
* **软件级虚拟 LED 兼容层**:将原有的 `LED_R`, `LED_G`, `LED_B` 重定义为全局 `bit` 软件变量。在 1ms `Timer1_Isr` 结尾捕获到虚拟 LED 的状态改变时,再自动调用 `WS2812` 驱动输出对应的 GRB 24 位电平。这使得应用层所有的 LED 闪烁及颜色逻辑无需任何改动,保证了系统的高稳定性与高扩展性。
|
* 使用 `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. 自适应射频解码兼容性
|
### 3. 自适应射频解码兼容性
|
||||||
* 重构为**基于电平比例的自适应解码算法**。放宽绝对微秒窗口限制,通过低/高电平比例(15~48倍,基准为31倍)自动识别 EV1527 帧并解析数据。
|
* 重构为**基于电平比例的自适应解码算法**。放宽绝对微秒窗口限制,通过低/高电平比例(15~48倍,基准为31倍)自动识别 EV1527 帧并解析数据。
|
||||||
* 优化串口调试输出,避免大量多行打印造成的 CPU 阻塞。
|
|
||||||
|
|
||||||
### 4. 严格匹配要求的按键与事件交互逻辑
|
### 4. 严格匹配要求的按键与事件交互逻辑
|
||||||
* **进入配对菜单**:在待机模式下,同时长按 `▲` + `▼` 3秒,进入传感器类型选择菜单。
|
* **进入配对菜单**:在待机模式下,同时长按 `▲` + `▼` 3秒,进入传感器类型选择菜单。
|
||||||
@@ -54,27 +64,10 @@
|
|||||||
* **字模基线对齐**:将 `%` 字符(0x25)的字模数据在 8x16 矩阵中向上平移 2 像素,使其与前面的数字处于同一水平基准线。
|
* **字模基线对齐**:将 `%` 字符(0x25)的字模数据在 8x16 矩阵中向上平移 2 像素,使其与前面的数字处于同一水平基准线。
|
||||||
* **坐标优化防重合**:将电池图标右移至 `X=92, Y=27`,电量百分比置于 `X=62, Y=24`。二者之间保留 6 像素间距,既美观又完美杜绝了贴合与重叠问题。
|
* **坐标优化防重合**:将电池图标右移至 `X=92, Y=27`,电量百分比置于 `X=62, Y=24`。二者之间保留 6 像素间距,既美观又完美杜绝了贴合与重叠问题。
|
||||||
|
|
||||||
### 7. 对码捕获卡顿 Bug 修复
|
|
||||||
* 修复了 `while(1)` 循环开头无条件执行 `state_changed = 0` 导致在 Section 4 异步检测到射频匹配信号跳入 `STATE_PAIR_CONFIRM` 后重绘标记被强行抹除、屏幕始终卡死在搜索雷达页面的 Bug。现在已改在重绘判定内部重置,检测到对码信号即可瞬间跳转至“捕获成功”确认页。
|
|
||||||
|
|
||||||
## 仿真模式扩展说明
|
|
||||||
|
|
||||||
为了支持无物理元件调试,串口输入指令集已同步扩展:
|
|
||||||
* **模拟组合按键**:串口发送 **`c`** 字符,模拟同时长按 `▲` + `▼` 按键 3 秒进入配对菜单。
|
|
||||||
* **模拟确认搜索**:在菜单页下发送 **`s`**,模拟按下 SOS 键,触发 100ms 短振与白灯快闪,进入对码搜索(雷达显示)。
|
|
||||||
* **模拟按键解除**:在求救模式下,发送 **`U`**、**`D`** 或 **`S`**(代表长按按键),即可解除 SOS 并退回时钟。
|
|
||||||
* **模拟切换系统布防状态**(用于测试普通防区的触发):
|
|
||||||
* 发送 **`1`**:强制系统进入 **NORMAL** 撤防/常态模式(门磁/PIR 触发时会被忽略,烟感/水浸/燃气仍可触发)。
|
|
||||||
* 发送 **`2`**:强制系统进入 **ARMED** 布防模式(门磁/PIR 此时被触发会立刻报警)。
|
|
||||||
* 发送 **`3`**:强制系统进入 **DISARMED** 撤防模式。
|
|
||||||
|
|
||||||
## 编译与 Git 仓库同步信息
|
## 编译与 Git 仓库同步信息
|
||||||
|
|
||||||
* **编译器**:Keil C251 V5.60.0.0
|
* **编译器**:Keil C251 V5.60.0.0
|
||||||
* **编译输出目标**:`Build\wristband.hex`
|
* **编译输出目标**:`Build\wristband.hex`
|
||||||
* **编译状态**:0 Errors, 2 Warnings (均属于未调用辅助函数的警告,无任何影响)
|
* **编译状态**:0 Errors, 3 Warnings
|
||||||
* **Program Size**:data=104.7, edata+hdata=351, xdata=352, const=1390, code=13855
|
* **Program Size**:data=105.0, edata+hdata=351, xdata=370, const=1648, code=14237
|
||||||
* **Git 仓库地址**:`https://dev.xtell.cn/zouhaitao/stc32g128k.git`
|
* **Git 仓库地址**:`https://dev.xtell.cn/zouhaitao/stc32g128k.git`
|
||||||
* **Git 提交记录**:
|
|
||||||
* `feat: initial commit for stc32g12k128 wristband firmware` (含完整 `.gitignore` 规则,已成功忽略全部编译器生成的 `.obj` / `.lst` / `.hex` 等中间临时文件)。
|
|
||||||
* `feat: translate UI to French and implement XL-2020RGBC-2812B addressable RGB LED driver` (添加了法语界面翻译与 WS2812B 精准时序单线驱动,并成功推送至远程 `master` 分支)。
|
|
||||||
|
|||||||
Reference in New Issue
Block a user