0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

多個WS2812燈珠的點亮實驗

冬至子 ? 來源:O老師講32 ? 作者:O老師 ? 2023-10-24 14:51 ? 次閱讀

今天看到一位同學在群里面的留言,要我寫一個長串WS2812點亮的程序,因為時間不多,于是簡單地寫了一個,該程序使用DMA+SPI2來發(fā)送數據,使用的是環(huán)芯智能科技的開發(fā)板(淘寶店鋪:環(huán)芯智能實驗室),燈珠是淘寶買的,一共12顆。下面分享一下:

一、STM32CubeMX的設置

這里的設置主要是SPI模塊的設置,我們采用SPI模塊來發(fā)送顏色數據。其設置如下:

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< 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發(fā)到到目標燈串的函數。

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接口)。

反復測試了幾次,效果還不錯。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • dma
    dma
    +關注

    關注

    3

    文章

    552

    瀏覽量

    99937
  • GPIO
    +關注

    關注

    16

    文章

    1175

    瀏覽量

    51515
  • SPI通信
    +關注

    關注

    0

    文章

    35

    瀏覽量

    11319
  • WS2812
    +關注

    關注

    0

    文章

    31

    瀏覽量

    6034
  • stm32cubemx
    +關注

    關注

    5

    文章

    278

    瀏覽量

    14621
收藏 人收藏

    評論

    相關推薦

    stm32F767 控制WS2812的問題

    使用stm32F767 PWM+DMA控制108個WS2812, 第一個顏色有時不正常,其它
    發(fā)表于 08-19 17:43

    WS2812B RGB全彩LED

    WS2812B RGB全彩LED,只需通過一根信號線控制多個顯示,本教程使用X-CTR100控制器驅動
    發(fā)表于 08-06 08:15

    【FireBeetle Board ESP32-E IoT 開發(fā)板試用體驗】WS2812彩色燈帶顯示效果

    ?后經測試,證明該是基于WS2812的顯示器件。由圖1的原理圖可知,其控制引腳為IO5。圖1WS2812連接關系對于這個器件我們該如何來使用它呢?為了在ArduinoIDE的環(huán)境下
    發(fā)表于 08-28 23:41

    如何用ATtiny85控制WS2812

    文章目錄前言一、硬件1.引入庫二、軟件1.引入庫總結前言之前就答應過大家要把ATtiny85芯片玩出更多花樣。用ATtiny85控制WS2812,我們可以玩出花來,甚至做成點陣屏幕都可以。這一
    發(fā)表于 12-10 07:12

    用STM32控制WS2812 RGB帶的代碼分享

    用STM32控制WS2812 RGB帶的代碼分享
    發(fā)表于 12-15 07:09

    Arduino控制WS2812帶的方法

    形與一個5050LED相同,每個元件即為一個像素點。像素點內部包含了智能數字接口數據鎖存信號整形放大電路,還包括有高精度的內部振蕩器和可編程電流控制部分,有效保證了像素點的顏色高度一致。1)FastLED庫FastLED 是一款功能強大、簡單易用的控制
    發(fā)表于 01-12 08:08

    為什么用樹莓派驅動WS2812會不亮呢

    為什么用樹莓派驅動WS2812會不亮呢?是什么原因?如何解決?
    發(fā)表于 01-18 06:11

    自制60位WS2812環(huán)

    描述60位WS2812環(huán)超小60位WS2812環(huán)可作為超小時鐘采用2020環(huán)圈只有36mm不到目前市60位環(huán)半徑78毫米的雙面鋪銅上層
    發(fā)表于 09-01 07:11

    【BPI-Pico-RP2040 開發(fā)板】+WS2812彩燈效果制作

    MAXIMUM_NUM_NEOPIXELS 7”時,使用7個WS2812帶,則其顯示效果如圖9至圖11所示。圖9點亮綠色LED圖1
    發(fā)表于 03-22 12:48

    如何進行WS2812的面板制作詳細資料合集免費下載

    本文檔的主要內容詳細介紹的是如何進行WS2812的面板制作詳細資料合集免費下載包括了:DMX512轉WS2812 面板程序,STC8系列單片機技術參考手冊,
    發(fā)表于 05-29 17:36 ?162次下載
    如何進行<b class='flag-5'>WS2812</b>的面板<b class='flag-5'>燈</b>制作詳細資料合集免費下載

    STM32使用LL庫PWM的DMA模式驅動ws2812

    STM32使用LL庫PWM的DMA模式驅動ws2812一、WS2812簡介二、CUBEMX初始化代碼配置一、WS2812簡介給個鏈接吧,ws2812時序簡介
    發(fā)表于 11-30 10:21 ?66次下載
    STM32使用LL庫PWM的DMA模式驅動<b class='flag-5'>ws2812</b>

    STM32F103C8T6+PWM+DMA驅動 WS2812

    #STM32+PWM+DMA驅動 WS2812帶#文章目錄1.理論:2代碼:理論:使用STM32F103C8T6驅動WS2812帶,每個
    發(fā)表于 12-27 19:29 ?211次下載
    STM32F103C8T6+PWM+DMA驅動 <b class='flag-5'>WS2812</b><b class='flag-5'>燈</b>帶

    超小60位WS2812環(huán)

    電子發(fā)燒友網站提供《超小60位WS2812環(huán).zip》資料免費下載
    發(fā)表于 08-12 09:58 ?20次下載
    超小60位<b class='flag-5'>WS2812</b><b class='flag-5'>燈</b>環(huán)

    最簡WS2812類似RGB條驅動方法

    最簡WS2812類似RGB條驅動方法
    的頭像 發(fā)表于 06-19 17:51 ?3183次閱讀
    最簡<b class='flag-5'>WS2812</b>類似RGB<b class='flag-5'>燈</b>條驅動方法

    迪文屏控制WS2812氛圍

    ——來自迪文開發(fā)者論壇本期為大家推送迪文開發(fā)者論壇獲獎開源案例——迪文屏控制WS2812氛圍。工程師通過COF智能屏的OS核精準控制WS2812幻彩燈帶每一顆
    的頭像 發(fā)表于 01-26 08:12 ?763次閱讀
    迪文屏控制<b class='flag-5'>WS2812</b>氛圍<b class='flag-5'>燈</b>