ws2812时序

🔧 修复内容

  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) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值