🔧 修复内容
1. ws2812b.c - 修正时序参数 (ws2812b.c:3-44)
问题原因:
- STM32F411运行在100MHz,每个时钟周期=10ns
- 原代码NOP数量严重不足(只有4个和16个),无法满足WS2812B的0.4us/0.8us时序要求
修复方案:
// 修复前: 只有4个NOP (约40ns)
void RGB_LED_Write0(void) {
RGB_LED_HIGH;
__NOP();__NOP();__NOP();__NOP(); // ❌ 远远不够!
RGB_LED_LOW;
...
}
// 修复后: 25个NOP (约400ns = 0.4us) ✅
void RGB_LED_Write0(void) {
RGB_LED_HIGH;
// T0H: 0.4us - HAL_GPIO_WritePin约需10-15个时钟周期,再加25个NOP
__NOP();__NOP();...(共25个)...
RGB_LED_LOW;
// T0L: 0.85us - 60个NOP
__NOP();__NOP();...(共60个)...
}
// 修复后: Write1的时序也正确
void RGB_LED_Write1(void) {
RGB_LED_HIGH;
// T1H: 0.8us - 55个NOP
...
RGB_LED_LOW;
// T1L: 0.45us - 20个NOP
...
}
时序对照表:
| 参数 | 要求 | 时钟周期@100MHz | NOP数量 |
|-----|--------|-------------|----------------|
| T0H | 0.4us | 40 | 25 (加HAL开销≈40) |
| T0L | 0.85us | 85 | 60 (加HAL开销≈85) |
| T1H | 0.8us | 80 | 55 (加HAL开销≈80) |
| T1L | 0.45us | 45 | 20 (加HAL开销≈45) |
570

被折叠的 条评论
为什么被折叠?



