
本帖最后由 哈佛祖安智 于 2016-11-28 15:30 编辑 使用STM32L011D4P6驱动了WS2812B RGB5050 全彩LED,使用ST最新的HAL库。 WS2812B简介:6 T# D9 g; l, Z& k* I3 x) e 新一代的RGB5050将控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。 -内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。0 o8 L6 g- T6 j F! \1 l -内置上电复位和掉电复位电路。 -每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。" V$ _% v1 k9 X+ [3 A1 c -串行级联接口,能通过一根信号线完成数据的接收与解码。- [. B, j% {- r& R8 z5 m) D9 w& d -任意两点传传输距离在不超过5米时无需增加任何电路。" u1 O* w* w1 j9 h$ o. J -当刷新速率30帧/秒时,低速模式级联数不小于512点,高速模式不小于1024点。 -数据发送速度可达800Kbps。 -光的颜色高度一致,性价比高。5 Y8 T# C% o. j7 t8 h 基于STM32驱动WS2812B设计案例概述:! H2 ]/ g6 u! s) J: z3 _& U1 z 使用了STM32L011D4P6设计了最小系统板,电源部分前级采用TI高效率开关电源芯片TPS563200将12V转换为5V,再由低压差LDO AMS1117-3.3转换为3.3V给单片机供电,STM32使用了PWM来模拟24bit数字信号,驱动了WS2812B,达到LED颜色,亮度可控的目的。详细介绍及程序文件详见附件内容。! P$ C1 F6 F7 h: e: A8 u! E: q 0 J$ }6 R+ L5 Q- n0 s1 A: w 工程采用CubeMX生成,使用的是ST最新的HAL库,需要使用keil5及以上版本打开,CubeMX版本需要16.0及以上,下载地址:http://www.st.com/content/st_com/zh/...cmp=pf259242_prom_stm32cube-long-promo_feb2014; 优酷视频:* E3 ?( q" o1 f/ M s& _ 7 K9 G1 V8 Q( d/ P6 z, M# q 三点说明:" @1 L+ \3 l, o' k; C WS2812B为5V供电,5V逻辑器件,因此需要电平转换IC; RGB5050 最大60mA电流,单色时为20mA.因此应根据灯珠的多少设计合适的电源; 本设计采用TI开关电源芯片TPS563200,最大3A电流输出能力。2 E; g* u g% ^9 ^ STM32驱动WS2812B电路板截图: ~: X0 s" E r6 B( ] ![]() ; g% m% x& l' S' G6 J1 u% w ![]() - G! p7 D1 {6 Y, n 文件下载: ![]() |
2016.11.28最新程序移步http://club.gizwits.com/forum.ph ... amp;extra=#pid12633
其中D1为MCU端发送的数据,D2、D3、D4为级联电路自动整形转发的数据。这个数据发送的模式我没太懂,如果1颗灯就是24bit GRB,如果2颗灯就是 发两个 24bit GRB 24bit GRB,如果是3颗灯就是 24bit 24bit 24bit 是么?
这个只是实现了基本的RGB控制,周末再把库函数发上来
# p) p }& _* f9 o+ p/ t
我在调试的过程中驱动也有些问题,Send_8bits(255);这个函数执行只发5位数据,示波器读取只读到5个1码的波形。0码的话就是8位。是不是我的DMA数据传输有问题呢?
我这个没用DMA,你先把基本的调通看看
嗯,上一颗灯取走自己的24bit数据后,把剩余的数据转发给下一颗LED