【E812】WS2812B渐变色流水算法+PWM DMA驱动STM32源程序

2021-09-06 08:54:19      索炜达电子      2403     

项目编号:E812

文件大小:299K

源码说明:带中文注释

开发环境:C编译器

简要概述:

最近在学习STM32,到定时器与DMA章节,正巧手头有先前买的WS2812B模块,查找相关资料,于是成功点亮了,
又按照自己想法和思路写了一个渐变色算法,和渐变色流水功能,

可自定义灯的数量和渐变色的深度

渐变色原理:
假如红蓝两色变换
红(亮度):10   8   6   4   2   0
蓝(亮度):0     2   4   6   8   10

这样就形成两种颜色的过度
加大其分辨率,两颜色之间颜色差越小,生成颜色数据越多

在流水过程中,颜色取到数组末尾时,要将数组首端的数据加在末尾,使其颜色无差别连接

控制代码:

生成三种颜色数据数组

  1. /**

  2. * color_length 每种颜色渐变最大长度,总颜色长度:color_length * 3

  3. * return 颜色数据总长度

  4. */

  5. uint32_t set_Color_Loop(uint8_t color_length)

  6. {

  7.     RGB = (uint32_t*)malloc(color_length*3*sizeof(uint32_t));//分配数组大小,(所有渐变色颜色长度)

  8.     color_length -= 1;

  9.     for(uint8_t i=0;i<=color_length;i++)

  10.     {

  11.         RGB[i] = (((0xff/color_length)*i)<<8)|((0xff/color_length)*(color_length-i));                                       //蓝到绿

  12.         RGB[color_length + 1 +i] = (((0xff/color_length)*i)<<16)|((0xff/color_length)*(color_length-i))<<8; //绿到红

  13.         RGB[((color_length+1)*2) +i] = ((0xff/color_length)*i)|((0xff/color_length)*(color_length-i))<<16;   //红到蓝

  14.     }

  15.     return color_length*3;

  16. }



  17. 无间断位移获取8位颜色数据

  18. /**

  19. * colorwidth 每次获取多少位

  20. */


  21. void out_RGB(uint16_t data_Max_Length,uint16_t colorwidth)

  22. {

  23.     static uint32_t rgb_position = 0;

  24.     for(uint32_t i = 0;i < colorwidth; i++){

  25.         uint16_t c = (rgb_position + i) % data_Max_Length;//末尾颜色数据结束时将首位的收据填充到数组

  26.         send_Data(RGB[c]);

  27.     }

  28.     rgb_position ++;

  29.     rgb_position %= data_Max_Length;

  30. }

【E812】WS2812B渐变色流水算法+PWM DMA驱动STM32源程序

【E812】WS2812B渐变色流水算法+PWM DMA驱动STM32源程序

目录│文件列表:

 └ WS2812B

    │ keilkill.bat

    ├ Doc

    │  └ readme.txt

    ├ Libraries

    │  ├ CMSIS

    │  │  │ core_cm3.c

    │  │  │ core_cm3.h

    │  │  │ stm32f10x.h

    │  │  │ system_stm32f10x.c

    │  │  │ system_stm32f10x.h

    │  │  └ startup

    │  │     │ startup_stm32f10x_cl.s

    │  │     │ startup_stm32f10x_hd.s

    │  │     │ startup_stm32f10x_hd_vl.s

    │  │     │ startup_stm32f10x_ld.s

    │  │     │ startup_stm32f10x_ld_vl.s

    │  │     │ startup_stm32f10x_md.s

    │  │     │ startup_stm32f10x_md_vl.s

    │  │     └ startup_stm32f10x_xl.s

    │  └ STM32F10x_StdPeriph_Driver

    │     ├ inc

    │     │  │ misc.h

    │     │  │ stm32f10x_adc.h

    │     │  │ stm32f10x_bkp.h

    │     │  │ stm32f10x_can.h

    │     │  │ stm32f10x_cec.h

    │     │  │ stm32f10x_crc.h

    │     │  │ stm32f10x_dac.h

    │     │  │ stm32f10x_dbgmcu.h

    │     │  │ stm32f10x_dma.h

    │     │  │ stm32f10x_exti.h

    │     │  │ stm32f10x_flash.h

    │     │  │ stm32f10x_fsmc.h

    │     │  │ stm32f10x_gpio.h

    │     │  │ stm32f10x_i2c.h

    │     │  │ stm32f10x_iwdg.h

    │     │  │ stm32f10x_pwr.h

    │     │  │ stm32f10x_rcc.h

    │     │  │ stm32f10x_rtc.h

    │     │  │ stm32f10x_sdio.h

    │     │  │ stm32f10x_spi.h

    │     │  │ stm32f10x_tim.h

    │     │  │ stm32f10x_usart.h

    │     │  └ stm32f10x_wwdg.h

    │     └ src

    │        │ misc.c

    │        │ stm32f10x_adc.c

    │        │ stm32f10x_bkp.c

    │        │ stm32f10x_can.c

    │        │ stm32f10x_cec.c

    │        │ stm32f10x_crc.c

    │        │ stm32f10x_dac.c

    │        │ stm32f10x_dbgmcu.c

    │        │ stm32f10x_dma.c

    │        │ stm32f10x_exti.c

    │        │ stm32f10x_flash.c

    │        │ stm32f10x_fsmc.c

    │        │ stm32f10x_gpio.c

    │        │ stm32f10x_i2c.c

    │        │ stm32f10x_iwdg.c

    │        │ stm32f10x_pwr.c

    │        │ stm32f10x_rcc.c

    │        │ stm32f10x_rtc.c

    │        │ stm32f10x_sdio.c

    │        │ stm32f10x_spi.c

    │        │ stm32f10x_tim.c

    │        │ stm32f10x_usart.c

    │        └ stm32f10x_wwdg.c

    ├ Project

    │  │ BH-F103.uvguix.KaiXuan

    │  │ BH-F103.uvoptx

    │  │ BH-F103.uvprojx

    │  │ EventRecorderStub.scvd

    │  ├ DebugConfig

    │  │  └ Target_1_STM32F103ZE_1.0.0.dbgconf

    │  └ Objects

    │     │ BH-F103.hex

    │     └ BH-F103.sct

    └ User

       │ main.c

       │ main.c.orig

       │ stm32f10x_conf.h

       │ stm32f10x_conf.h.orig

       │ stm32f10x_it.c

       │ stm32f10x_it.c.orig

       │ stm32f10x_it.h

       │ stm32f10x_it.h.orig

       ├ delay

       │  │ delay.c

       │  └ delay.h

       ├ sys

       │  │ sys.c

       │  └ sys.h

       ├ usart

       │  │ usart.c

       │  └ usart.h

       └ W2812B

          │ WS2812B.c

          └ WS2812B.h

TAGWS2812B
  • 21 次
  • 1 分