docs: 重构系统层级为自下而上,剥离独立事件管理模块,全量校正GPIO引脚映射为原理图线标

This commit is contained in:
2026-07-10 10:04:40 +08:00
parent fdda10aadc
commit a04ea5fb51
28 changed files with 291 additions and 120 deletions

View File

@@ -9,20 +9,20 @@
## 2. 关键代码片段与逻辑实现
### 2.1 驱动初始化与管脚分配
WS2812B 输入脚接在单片机硬件 SPI 组管脚中的 MOSI (`P2.3`)
WS2812B 输入脚接在单片机物理引脚 `LED_RGB` (`P2.6`)
```c
sbit WS2812_DI = P2^3;
sbit WS2812_DI = P2^6; // Pin 27
void WS2812_Init(void) {
// P2.3 (MOSI) 配置为推挽输出,默认输出低电平 0
P2M1 &= ~(1 << 3);
P2M0 |= (1 << 3);
// P2.6 (LED_RGB) 配置为推挽输出,默认输出低电平 0
P2M1 &= ~(1 << 6);
P2M0 |= (1 << 6);
WS2812_DI = 0;
}
```
### 2.2 硬件 SPI 防噪声极速发送 (WS2812_Write24Bit)
由于 SPI 时钟 SCLK 与马达引脚`P2.5`,发送期间关闭总中断并将 `P2.5` 设为高阻输入以规避马达杂音,通过 SPDAT 展开 24bit 数据串行输出
### 2.2 驱动防噪声发送 (WS2812_Write24Bit)
由于马达引脚`P2.4` (Pin 25),为了规避马达震动时的共地杂噪,在串行输出数据期间关闭总中断并将马达引脚 `P2.4` 设为高阻输入。
展宽 LUT 定义:
```c
const u16 code SPI_LUT[16] = {
@@ -45,11 +45,11 @@ void WS2812_Write24Bit(u8 g, u8 r, u8 b) {
b4 = buf[4]; b5 = buf[5]; b6 = buf[6]; b7 = buf[7];
b8 = buf[8]; b9 = buf[9];
EA = 0; // 关中断保证 SPI 传输的连续性
EA = 0; // 关中断保证串行传输的连续性
// 配置 P2.5 为高阻输入模式,屏蔽马达噪声
P2M1 |= (1 << 5);
P2M0 &= ~(1 << 5);
// 配置 P2.4 (MOTOR_PWM) 为高阻输入模式,屏蔽共地马达干扰
P2M1 |= (1 << 4);
P2M0 &= ~(1 << 4);
SPSTAT = 0xC0; // 清除 SPI 状态寄存器
SPDAT = b0; // 发送数据
@@ -81,9 +81,9 @@ void WS2812_Write24Bit(u8 g, u8 r, u8 b) {
SPCTL = 0x90; // 关闭 SPI 硬件使能
WS2812_DI = 0;
// 恢复 P2.5 为推挽输出,控制马达常规功能
P2M1 &= ~(1 << 5);
P2M0 |= (1 << 5);
// 恢复 P2.4 (MOTOR_PWM) 为推挽输出,恢复马达控制
P2M1 &= ~(1 << 4);
P2M0 |= (1 << 4);
MOTOR = 0; // 确保马达断开
EA = 1; // 恢复中断