多个WS2812灯珠的点亮实验

今天看到一位同学在群里面的留言,要我写一个长串ws2812点亮的程序,因为时间不多,于是简单地写了一个,该程序使用dma+spi2来发送数据,使用的是环芯智能科技的开发板(淘宝店铺:环芯智能实验室),灯珠是淘宝买的,一共12颗。下面分享一下:
一、stm32cubemx的设置
这里的设置主要是spi模块的设置,我们采用spi模块来发送颜色数据。其设置如下:
1.设置spi的通信参数,如图1所示
图1 spi2的参数设置
2.spi2的dma的设置,如图2所示
图2 spi2的dma的设置
关于这些设置,我们在spi接口和dma中都已经给出了详细的解释,所以这里就不再啰嗦了。
二、主函数的内容
int main(void){ /* user code begin 1 */ uint32_t col[12] = {0xff,0x00ff00,0xff0000,0xffffff,0xfff, 0xfff0,0xfff000,0xffffff,0xff0000,0xf00,0x0f0,0xfff0}; /* user code end 1 */ /* mcu configuration--------------------------------------------------------*/ /* reset of all peripherals, initializes the flash interface and the systick. */ hal_init(); /* user code begin init */ /* user code end init */ /* configure the system clock */ systemclock_config(); /* user code begin sysinit */ /* user code end sysinit */ /* initialize all configured peripherals */ mx_gpio_init(); mx_dma_init(); mx_spi2_init(); /* user code begin 2 */ ws2812_showmany_grb(col, sizeof(col)); /* user code end 2 */ /* infinite loop */ /* user code begin while */ while (1) { /* user code end while */ /* user code begin 3 */ } /* user code end 3 */}主函数中实际上只有两条语句是自己实现,其他都由cubemx生成。一条是定义12个灯珠的颜色数组,一个是调用显示多个灯珠的函数。
三、ws2812模块的内容
首先来看ws2812.c的内容,如下所示
#include ws2812.h #define led_num 12u //灯的数量#define reset_word 350u //复位长度#define spi_datalen (reset_word + 24u*led_num) extern spi_handletypedef hspi2;uint8_t buf[spi_datalen] = {0};/******************************************************/void ws2812_showmany_grb(uint32_t grb[], uint8_t num){ uint16_t i = 0, j = 0; for(i = 0; i < num; i++ ) { for(j = 0; j < 24u; j ++) { if(grb[i] & (1< <(23u -j))) buf[reset_word + i*24u+j] = code_1; else buf[reset_word + i*24u+j] = code_0; } } hal_spi_transmit_dma(&hspi2, buf, sizeof(buf));}/******************************************************/在ws2812.c中,我们实现一个转换颜色数据并通过dma发到到目标灯串的函数。
ws2812.h的内容如下:
#ifndef _ws2812_h#define _ws2812_h#include main.h#define code_1 0xfc#define code_0 0xc0 void ws2812_showmany_grb(uint32_t grb[], uint8_t num);#endif四、实验结果
最终的结果如图3所示。
图3 实验结果
五、电路连接
整个电路连接图如图4所示。
图4 电路连接图
3根线中,一根是5v,一根是地,还有一根是pb15(spi2的mosi接口)。
反复测试了几次,效果还不错。

独石电容生产工艺
中国工程院院士许祖彦:激光技术为什么是重要战略支撑技术
智慧照明企业华体科技发布2022第一季度报告
在水泥工程机械搅拌行业中称重传感器有哪些广泛应用?
状态机概述 如何理解状态机
多个WS2812灯珠的点亮实验
小米6怎么样?小米6最新消息:三大猜想,小米6或将再一次惊艳世人
Valens与英特尔合作开发下一代A-PHY产品
如何降低串扰对PCB板的影响
一款全新大屏自助收银终端HS6500,英特尔助力海信数字化零售创新
小米手环3非NFC版使用体验 性价比还是非常不错的
结合3D打印塑料领域的两家典型企业Stratasys与Polymaker,了解其应用趋势
一加美国市场上发布的首款屏幕指纹解锁手机
中兴5G又在欧洲放大招啦!
沃尔玛正在全面拥抱区块链技术
深度测评本田思域1.8L
WiSA Technologies低成本空间音频模组获得业界采用
智能汽车技术趋于成熟,自动驾驶汽车临近商用
EOS系统通胀中心化问题的解决方案
全球LCD TV面板供应紧缺情况将延续至四季度?