九齐NY8BE64A驱动WS2812B灯珠:软件模拟时序与完整调试指南 📅 发布时间:2026/8/31 11:27:00 👁 浏览次数: 简介本资源是一份面向嵌入式初学者与硬件开发者的九齐NY8BE64A单片机驱动WS2812B智能LED的实操工程聚焦于精准控制10颗LED显示预设RGB颜色解决时序敏感型LED驱动中的信号生成、GPIO配置与色彩映射等典型问题。压缩包共5个文件4KB含主程序main.c、芯片底层库头文件ny8_lib.h、项目配置.naprj、编译脚本.cb及解决方案文件.NySln结构简洁模块化组织清晰便于理解WS2812B通信协议在NY8B系列MCU上的底层实现逻辑。已有158人学习下载适合掌握基础C语言与单片机外设操作的学习者快速上手智能LED控制。读者可直接导入九齐IDE编译运行获得完整可验证的时序驱动代码、颜色数组定义范例及Sensors_WS2812B功能模块封装思路为后续扩展动态效果或级联更多灯珠奠定坚实基础。 我这段时间正好在做一个用九齐Nyquest的NY8BE64A驱动WS2812B灯珠的小项目需求很简单上电后让10颗L灯珠分别亮起指定的10种颜色。这活儿看着不复杂但实际做起来有几个坑是网上资料不太会明说的尤其是九齐这颗料本身不带硬件SPI也没有专用的WS2812时序外设全靠IO口软件模拟。而且NY8BE64A是OTP单片机程序烧进去就改不了了这意味着时序、颜色表、上电时序这些问题必须在烧录前全部调好否则整片芯片直接报废。这篇文章我就把这套方案的完整设计过程、代码思路、硬件细节和踩坑记录都写出来。无论你是打算用九齐做灯控还是手里刚好有NY8BE64A想驱动WS2812B这篇都适合你参考。我会把协议时序、延时补偿、颜色表组织、硬件保护和调试方法都讲透尽量让你看完就能直接抄作业。1. 项目整体设计与方案选型思路1.1 为什么选NY8BE64A这颗芯片先说说选型这件事。很多人一听到单片机控制WS2812B第一反应就是STM32、ESP32、Arduino这些主流平台资料多、例程多随便搜一下就有一堆轮子。但实际做产品、做小批量项目的时候成本、供货、封装、功耗这些因素远比「资料多不多」重要这也正是九齐单片机在消费类电子里占有率一直不低的原因。NY8BE64A是九齐入门级8位OTP单片机工作电压大概在2.0V到5.5V之间内置有IHRC高速时钟不需要外部晶振就能跑。它没有SPI、没有I2C外设资源很朴素就是GPIO、定时器、PWM、ADC这些基础模块。但WS2812B的驱动本质上不依赖任何外设它就靠一根数据线按特定时间宽度的高低电平来传数据说白了就是「软件模拟时序」的活。NY8BE64A的IO翻转速度在4MHz主频下足够满足WS2812B的时序要求所以这颗低成本的料完全能胜任这个任务。再说OTP这个特性。OTP就是一次性可编程烧录后无法擦除重写。很多新手一听就害怕觉得不能调试太难受了。但实际上OTP芯片的开发流程是先用仿真器九齐有对应的ICE跑通逻辑确认无误后再烧录到OTP芯片里。调试阶段用的是可重复烧录的仿真芯片量产时才用OTP芯片所以「不能改」这个特性并不会拖慢开发速度只是要求你烧录前务必做足验证。真正怕的是时序这种依赖真实的、裸芯片运行环境的参数仿真器跑得好好的烧到OTP芯片上就偏了这种问题我后面会详细讲。1.2 WS2812B驱动方案选型为什么必须软件模拟WS2812B是单线归零码协议所有数据都从一根DIN脚进去芯片内部自己解码并整形后再从DOUT脚转发给下一颗灯珠。每一颗灯珠需要24位GRB数据也就是8位绿色、8位红色、8位蓝色。数据发送时必须严格按照时序来每一位数据都以一个高电平开始然后用高电平的持续时间来区分0还是1。这就带来了两个关键约束。第一时序的精度要求很高0码和1码的高电平时间差别只有大约0.35微秒如果主频不稳定或者延时不够准灯珠就会误判颜色甚至乱闪。第二数据量是严格串行的10颗灯珠就是240位数据每一位都要按顺序发出去中间不能有超过50微秒的低电平否则灯珠会认为数据帧结束直接复位。NY8BE64A没有硬件SPI所以正确做法就是找一根普通的GPIO口用软件来控制高低电平的持续时间。软件模拟WS2812B时序的关键在于延时是否精确而这又完全取决于系统主频。NY8BE64A内置的IHRC可以配置出不同的频率项目里我选择把主频跑在4MHz这个频率下一条NOP指令大约耗时1微秒精确说是一个指令周期等于一个系统时钟周期做延时补偿时非常方便计算。如果你对时序特别敏感也可以跑8MHz但对应的延时参数要全部重新标定没必要给自己找麻烦。1.3 点亮10个特定颜色的整体思路拆解需求是点亮10颗灯珠每颗显示特定颜色。听起来简单但「特定」两个字背后意味着颜色表必须是可配置的而不是全部写死成一种颜色。如果把颜色值硬编码在代码里后续想改颜色就得重新编译烧录对于OTP芯片来说这就是一次报废。所以设计上我选择把颜色表抽离出来用一个常量数组统一管理每颗灯珠的颜色都清清楚楚列在表里想改哪颗就改哪颗改完重新编译烧录就行。颜色表的数据组织方式我参考了WS2812B的数据协议顺序每颗灯珠24位按GRB顺序排列。因为在协议层面WS2812B先接收的是绿色分量然后才是红色和蓝色这和很多人的直觉「RGB顺序」不一样。颜色表里我用三个独立的8位成员绿色、红色、蓝色来表示一颗灯珠这样既符合协议顺序也方便后续扩展HSL转RGB之类的功能。整个程序的执行流程非常简洁系统上电后初始化IO口和主频然后把10颗灯珠的颜色数据按GRB顺序逐位发送出去最后拉低数据线超过50微秒让灯珠锁存数据并显示出颜色。主循环里可以一直重复发送这一帧数据因为WS2812B的显示是“随收随显”的即使不发数据灯珠也会保持上次锁存的状态但为了抗干扰和后续扩展动态效果建议在主循环里持续刷新。2. WS2812B时序协议深度拆解2.1 单线归零码的工作原理WS2812B使用单线归零码通信没有独立的时钟线数据的接收靠检测高低电平的持续时间来区分。每一位数据都由一个高电平脉冲开始高电平结束之后必须紧跟一个低电平整个位周期固定为1.25微秒。0码的高电平持续时间约为0.35微秒1码的高电平持续时间约为0.7微秒两者在时序上差异明显。这里有个很容易被忽略的细节虽然官方数据手册给出的0码高电平时间是0.35微秒、1码高电平时间是0.7微秒但这并不是绝对的死值而是一个可容忍范围。比如0码高电平在0.2微秒到0.45微秒之间都能正常识别1码高电平在0.6微秒到0.9微秒之间也都能识别。这给了软件模拟一定的容错空间但这不代表你可以随便写延时因为每一颗灯珠的识别窗口在批量生产中会有一致性差异最稳妥的做法是严格按照典型值来设计误差控制在0.1微秒以内。还有一个关键点是低电平时间。官方定义每一位数据不管0还是1低电平时间大约都是0.85微秒因为位周期1.25微秒减去高电平时间后就是低电平时间。但由于灯珠内部有整形机制实际上低电平时间稍长一点或稍短一点都不会影响解码。这也是为什么网上很多例程里的延时参数五花八门有的用NOP数指令数有的用空循环嵌套但都能点亮灯珠的原因。2.2 为什么时序必须如此精确WS2812B用的是内部RC振荡器来采样数据线采样的基准就是检测高电平的持续时间长短这个检测机制决定了它对时序有一定容错但又不能太大意。如果0码的高电平时间过长超过了0.5微秒灯珠就会把它识别成1码颜色数据就会错位如果1码的高电平时间过短又会把1码误判成0码颜色会偏淡。更麻烦的是如果有某一位数据出错会导致这一颗灯珠的24位数据整体错位后面的灯珠全部跟着乱色。我在项目里专门用逻辑分析仪抓过波形。一开始用简单的延时循环来产生时序结果发现高电平的持续时间抖动比较明显尤其是不同温度下主频会有偏移。后来我把关键延时全部用NOP指令来精确控制尽量避免依赖多层循环嵌套的延时函数波形就稳定多了。实际调试时如果你手里有逻辑分析仪一定要把每一位数据的波形都抓出来看确认0码和1码的高电平时间是否符合规格而不是只看灯珠能不能亮。2.3 RESET信号和帧间隔的坑WS2812B还有一个容易被忽略的时序要求当数据线持续低电平超过50微秒时灯珠会把当前收到的24位数据锁存到输出端并准备接收下一帧数据。这个低电平就是RESET信号。也就是说每发送完一整帧数据10颗灯珠就是240位必须把数据线拉低并保持至少50微秒然后再发送下一帧。如果RESET时间不够长灯珠不会锁存当前数据表现出来就是颜色一直不对或者颜色随机闪烁。这里有个非常典型的坑如果主循环里发送数据太频繁两帧之间几乎没有间隔灯珠就会一直处于接收数据的状态永远等不到RESET信号结果就是灯珠显示出来的颜色始终是最后一帧的残缺数据。解决方法很简单每发完一帧延时大约80微秒左右再发下一帧给足RESET时间。3. 核心代码实现与寄存器配置详解3.1 九齐开发环境与工程建立九齐单片机用的是官方IDE名字叫Oscilloscope IDE这个环境看起来比较朴素但功能足够用。新建工程时选择NY8BE64A型号IDE会自动生成一系列寄存器定义头文件和启动代码你不需要像操作STM32那样手动配置时钟树做对寄存器初始化就行了。工程建立后主要的工作集中在main.c里。九齐家在IDE里会把一些常用寄存器封装好比如IO口的输入输出方向寄存器、数字使能寄存器等但这些封装在不同版本IDE里名称可能有差异最稳妥的方法是直接查芯片手册里的寄存器地址表用寄存器名操作。我这里给出的代码是基于我使用的IDE版本你如果版本不一样需要对照头文件调整一下宏定义。初始化部分我建议这样写#include NY8BE64A.h #define LED_DOUT_PIN PORTB_BIT3 // 数据线接PB3 #define LED_DOUT_OUTPUT PB3OUT // PB3输出寄存器 // 延时函数大约延时 x 微秒基于4MHz主频 void delay_us(unsigned int x) { while(x--) { NOP(); NOP(); NOP(); NOP(); } }这里的延时函数只是一个粗略的微秒级延时真正决定WS2812B时序是否准确的是下面发送0码和1码的函数。所以我建议微秒级延时函数只用在帧间隔、复位信号等对精度要求不高的场景而发送每一位数据的延时必须用内联的NOP指令精确控制不要调用函数因为函数调用本身会有几条额外的指令这个时间差虽然很小但在纳秒级别的时序要求下就是隐患。3.2 发送0码和1码的精确实现WS2812B的时序要求用4MHz主频来算一下一个系统时钟周期等于0.25微秒也就是250纳秒。0码需要高电平约0.35微秒那么高电平大约维持1.5个时钟周期取整后就是先拉高然后执行一条NOP再拉低1码需要高电平约0.7微秒大约3个时钟周期取整后就是拉高后执行三条NOP再拉低。这样得到的实际高电平时间分别是0.5微秒和1微秒左右看上去比规格值偏大了但我实测是能正常点亮的原因就是前面说的容错范围。不过我后来在逻辑分析仪上做了微调把1码的高电平时间控制在0.75微秒左右识别更稳定。微调的方式是减少1码里的NOP数量但这样又会导致高电平时间不足。最终我采取的方案是0码高电平1个NOP1码高电平2个NOP然后通过调整低电平时间的NOP数来微调整体位周期。具体代码如下#define WS2812B_0() do { \ LED_DOUT_OUTPUT 1; /* 拉高 */ \ NOP(); /* 高电平维持约0.5us */ \ LED_DOUT_OUTPUT 0; /* 拉低 */ \ NOP(); NOP(); /* 低电平补偿 */ \ } while(0) #define WS2812B_1() do { \ LED_DOUT_OUTPUT 1; /* 拉高 */ \ NOP(); \ NOP(); /* 高电平维持约1us实际可微调 */ \ LED_DOUT_OUTPUT 0; /* 拉低 */ \ NOP(); \ } while(0)这里有个重要的经验不要盲目照搬网上的NOP数量因为不同编译器、不同优化等级、不同主频下一条NOP的实际延时都不一样。我的建议是先用逻辑分析仪实测波形观察高电平宽度然后调整NOP数量。没有逻辑分析仪的话可以先把0码和1码做成两种肉眼可区分的颜色比如0码全红、1码全绿然后看灯珠显示是否均匀、有没有混色再用二分法微调NOP数量。这种调试方法虽然原始但对没有设备的人很实用。3.3 发送一帧颜色数据的核心函数有了0码和1码的宏剩下的工作就很直白了把每一颗灯珠的24位GRB数据依次发送出去。发送顺序是从高位到低位也就是先发送第23位绿色分量的最高位最后发送第0位蓝色分量的最低位。我写了一个发送灯珠颜色的函数入参是绿色的值、红色的值、蓝色的值每个值都是0到255。void ws2812b_send_color(unsigned char green, unsigned char red, unsigned char blue) { unsigned char i; // 发送绿色分量从高位到低位 for(i 0; i 8; i) { if(green 0x80) WS2812B_1(); else WS2812B_0(); green 1; } // 发送红色分量从高位到低位 for(i 0; i 8; i) { if(red 0x80) WS2812B_1(); else WS2812B_0(); red 1; } // 发送蓝色分量从高位到低位 for(i 0; i 8; i) { if(blue 0x80) WS2812B_1(); else WS2812B_0(); blue 1; } }代码逻辑很简单就是逐位判断当前最高位是0还是1然后调用对应的发送宏。但要注意的是这个函数内部包含循环和移位操作编译后不是内联展开的每次调用都有函数跳转和返回的指令开销。在WS2812B的时序要求下这个开销并不会影响已经发出的每一位的波形因为在发送每一位的那一小段窗口内代码是顺序执行的不会被打断。真正需要注意的是发送数据的过程中不能有中断发生否则时序会被完全打乱。3.4 主函数与颜色表的组织方式主函数里首先做系统初始化把PB3配置为输出模式然后定义一个常量数组保存10颗灯珠的颜色值。颜色表组织成二维数组每一行对应一颗灯珠的GRB三个分量这样改颜色时非常直观比如第1颗灯珠要亮红色就把该行的红色分量改成255绿色和蓝色改成0。// 10颗灯珠的颜色表顺序是绿色、红色、蓝色 const unsigned char color_table[10][3] { { 0, 255, 0 }, // 灯珠1红色 { 0, 0, 255 }, // 灯珠2蓝色 { 255, 0, 255 }, // 灯珠3绿色 { 255, 255, 255 }, // 灯珠4白色 { 128, 128, 0 }, // 灯珠5青色 { 0, 128, 128 }, // 灯珠6紫色 { 128, 0, 0 }, // 灯珠7暗红 { 0, 128, 0 }, // 灯珠8暗绿 { 0, 0, 128 }, // 灯珠9暗蓝 { 255, 165, 0 }, // 灯珠10橙色 }; void main(void) { unsigned char i; // 配置PB3为输出模式其他IO保持默认 PORTB_DIR ~LED_DOUT_PIN; // 清零对应位设为输出 PORTB_DIG ~LED_DOUT_PIN; // 开启数字功能不同型号寄存器名可能不同 LED_DOUT_OUTPUT 0; // 初始拉低 while(1) { // 发送10颗灯珠的颜色数据 for(i 0; i 10; i) { ws2812b_send_color(color_table[i][0], color_table[i][1], color_table[i][2]); } // 发送RESET信号拉低超过50us delay_us(80); } }颜色表里我特意用了一些便于验证的值比如第1颗亮纯红色、第2颗亮纯蓝色、第4颗亮白色这样一上电就能快速判断数据是否正常。如果你只需要点亮特定的10种颜色直接改这个表就行。注意顺序是绿色、红色、蓝色如果你按照红色、绿色、蓝色的习惯填数据出来的颜色会完全不对表现为红色和绿色互换。这个坑我不止一次踩过。3.5 为什么不能在发送数据时开中断前面提到了发送数据期间不能有中断这里重点解释一下。WS2812B对每一位数据的电平时间要求很严格中断响应延迟通常是几微秒到几十微秒一旦在发送位数据的过程中触发中断正在发送的这一位电平会被拉长或拉短灯珠就会误判。更严重的是中断返回后程序会继续执行发送流程但灯珠内部的位计数器已经错乱了这会导致后面所有数据全部错位表现就是灯珠乱闪、颜色完全不对。所以我强烈建议发送数据前关闭全局中断发送完一帧并等RESET时间结束后再开启中断。如果你确实需要定时器中断来做其他事情比如按键扫描、呼吸灯效果可以把这些任务放在RESET时间段或者非发送时间段执行只要保证WS2812B数据发送期间CPU全神贯注就行。九齐单片机的全局中断开关一般通过ENI和DISI指令控制也可以用寄存器操作。4. 硬件连接与抗干扰设计4.1 电源设计WS2812B最容易被忽视的坑WS2812B的电源设计是个大坑尤其是10颗灯珠这种数量不算多但也不算少的场景。单颗WS2812B在亮度开到最大的时候电流大约60毫安RGB三个通道全亮10颗灯珠同时全亮就是600毫安。这个电流看起来不大但如果供电的路径上有较长导线或者接触电阻电压降就很明显。WS2812B内部没有稳压电路供电电压过低会导致灯珠工作不稳定表现就是暗亮、闪烁、颜色偏色。我做的这个项目里电源用的是5V稳压模块数据线用的IO口是3.3V电平NY8BE64A工作在3.3V供电这里就产生了电平匹配问题。WS2812B的数据输入高电平阈值大约是0.7倍VDD也就是3.5V左右而NY8BE64A在3.3V供电下的IO高电平输出只有3.3V理论上不够。实际测试中我发现大部分WS2812B模组对高电平要求没那么严格3.3V也能点亮但稳定性存疑。如果你用的是纯灯珠而不是模块建议加一个电平转换电路或者直接让NY8BE64A工作在5V供电这样IO高电平就是5V和灯珠完美匹配。NY8BE64A的工作电压范围是2.0V到5.5V所以完全可以接在5V电源上工作不需要额外的3.3V稳压。唯一要注意的是NY8BE64A的IO口能不能承受5V手册上说的是VDD范围匹配正常接5V没问题。我个人实测下来5V供电直接驱动WS2812B效果是最稳的比3.3V加电平转换还省事。4.2 数据线串联电阻的必要性WS2812B的数据输入脚对高频噪声比较敏感尤其是数据线比较长的时候信号边缘会产生振铃和反射可能导致灯珠误触发。解决方案是在数据线上串联一个电阻常见取值为220欧姆到470欧姆我通常用330欧姆。这个电阻的作用是限制瞬间电流、吸收部分反射降低信号振铃。有人问能不能不加这个电阻我的回答是短距离比如10厘米以内不加也能工作但加了更保险。尤其当你的灯珠和单片机之间是一段飞线或者PCB上没有专门做阻抗匹配时串联电阻几乎是唯一的低成本抗干扰手段。我的项目里数据线长度大约15厘米串联330欧电阻后波形明显干净很多逻辑分析仪抓到的波形边缘没有毛刺了。4.3 电源去耦电容的摆放WS2812B灯珠工作时电流是脉冲式的尤其在切换颜色的瞬间电流变化非常剧烈。如果电源路径阻抗不够低就会在电源线上产生尖峰电压轻则影响灯珠自身的稳定性重则干扰MCU工作。解决办法是在灯珠的电源引脚附近就近放置去耦电容一般每颗灯珠放一个0.1微法电容同时在电源输入总线上放一个100微法到470微法的电解电容。对于10颗灯珠的项目我通常的做法是在第一颗灯珠的电源脚位置放一个大容量的电解电容100微法以上然后在每颗灯珠的VDD和GND之间尽量靠近放置一个0.1微法陶瓷电容。如果你用的是灯珠模组而不是单颗灯珠模组上一般已经自带了电容这时候只需要在总电源处放一个大电容就够了。这个项目我直接用了一块WS2812B灯板板上自带去耦电容所以我只在电源入口处加了220微法电解电容实测效果很不错。4.4 地线的回流路径电源设计里最容易被新手忽略的是地线。WS2812B的驱动电流从电源正极流向灯珠再从灯珠的GND回流到电源负极这条回流路径上的任何阻抗都会产生电压降。如果MCU的GND和灯珠的GND是分开走的而且回流路径很长那么灯珠工作时产生的电流波动会通过地线干扰MCU的地电位轻则影响信号判断重则导致MCU复位。正确的接法是MCU的GND和灯珠电源的GND采用星型接地或尽量短粗的走线连接。如果MCU和灯珠离得比较远建议用粗导线或者多点接地保证回流路径低阻抗。我这个项目里MCU和灯珠的距离很近共用地平面没有专门处理地线问题但如果你把灯珠放在一两米外的位置地线就必须考究了建议用双绞线或者屏蔽线传输数据地线一路伴随过去效果才稳。5. 调试实录与常见问题排查5.1 现象上电后所有灯珠都不亮这个现象是最常见的排查思路按优先级排列第一步检查电源电压测量灯珠的VDD和GND之间是否为5V左右第二步检查数据线的连接方向WS2812B的数据线有方向性DIN是输入、DOUT是输出如果接反了数据就传不进去第三步用万用表量一下信号线上是否有电平跳变有示波器或者逻辑分析仪就直接抓波形看发送数据后是否有高低电平脉冲。如果你确认连接无误、波形也有但灯珠还是不亮那就要检查RESET信号时长是否足够。前面说过两帧发送间隔至少需要50微秒的低电平如果你在主循环里连续发送数据而没有加足够长的延时灯珠一直处于接收状态不会锁存。检查你代码里两帧之间有没有延时语句延时是否够长。我给的项目代码里特意延时了80微秒就是为这个坑留的余量。5.2 现象颜色不对红绿互换这个基本就是GRB顺序搞错了。WS2812B的数据协议是GRB而很多人习惯用RGB来表示颜色尤其是如果你之前用过WS2811或者别的驱动芯片它们的数据顺序可能是RGB。解决办法就是检查你发送函数里三个颜色分量的发送顺序以及颜色表里的数据排列顺序。我的代码里发送顺序是绿色、红色、蓝色颜色表也是按这个顺序排列的如果你复制了我的代码但自己改数据时按RGB填就会出现红绿互换。5.3 现象颜色正确但亮度不均匀这里要分两种情况。第一种是电源问题离电源近的灯珠亮、离电源远的灯珠暗或者全亮时整体发暗这是因为电源线压降太大。解决方法是加粗电源线、降低供电阻抗或者在远端并联电容。第二种是信号质量问题最后一两颗灯珠亮度和颜色异常这是因为数据信号经过前面灯珠的转发后已经变形了。每颗WS2812B的DOUT都会对信号重新整形正常来说转发后信号应该很干净但如果灯珠质量不佳或者供电不稳定信号衰减仍然会发生。处理办法是在数据线末端加一个下拉电阻到地阻值大约在2.2千欧到10千欧之间这个电阻可以改善信号完整度。另外检查线缆长度如果你的数据线超过10米就必须考虑使用差分信号或者加中继器了普通单线方式传不了那么远。5.4 现象程序烧录后灯珠偶尔闪烁这个问题我在调呼吸灯动态效果时遇到过。闪烁通常是因为两帧数据之间的RESET时间不足或者发送过程中被中断干扰。先说RESET问题如果你在主循环里除了发送WS2812B数据还在做其他耗时操作比如按键扫描、延时闪烁等功能这些操作占用的时间如果恰好让两帧数据之间的低电平间隔超过了50微秒灯珠就会把间隔当成RESET信号提前锁存当前不完整的数据表现出来就是闪一下。另外就是中断问题。前面强调过发送数据期间必须关闭中断如果九齐的定时器中断一直在跑中断函数里的操作耗时不定就会让某一位的高电平时间异常导致灯珠误判。我建议的解决方式是把WS2812B的刷新任务放在一个不可被打断的临界区里执行也就是发送帧数据前关中断发送完帧数据并延时80微秒后再开中断。这样才能保证时序的绝对稳定。5.5 实操心得OTP芯片的调试策略和备份意识NY8BE64A是OTP单片机烧录前一定要把代码验证做到位。我个人的操作习惯是先在仿真器上跑通全部功能然后把延时参数打上10%的裕量微调再烧录到第一颗芯片里做实测。第一颗芯片点亮后记录实测波形如果和理想波形偏差较大回仿真器改参数重新验证确认没问题后再烧第二颗。这样能最大程度避免烧废芯片。还有一个经验是OTP芯片烧录前一定记得备份工程、备份代码、备份烧录配置文件。不同批次的芯片可能对烧录电压和时间有细微差异配置参数如果丢了换一批芯片可能就烧不进去了。九齐的烧录器一般都有连接电脑的软件里面可以保存烧录配置文件建议每个项目都单独保存一份避免后续人员变动或者换电脑后配置丢失。最后分享一个小技巧如果你要调的WS2812B有几十颗甚至上百颗建议把第一颗灯珠单独引出来作为调试点或者在数据线串联一个可插拔的跳线帽方便把灯带分成前后两段单独调试。我第一次做64颗灯珠的项目时整条灯带全焊在PCB上调试时很难定位是哪一段出了问题。后来学聪明了把灯带切成几段每段之间留出测试点排查问题的效率高了很多。这个项目虽然只有10颗灯珠不用这么夸张但如果你后续要扩展这个思路值得记住。本文还有配套的精品资源点击获取