chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

基于STM32G070RB的七彩星空燈教程

airX嵌入式 ? 來源:airX嵌入式 ? 作者:airX嵌入式 ? 2022-11-17 11:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


今天我們用STM32G070RB NUCLEO開發(fā)板 和WS2812燈帶制作一個七彩星空燈。

工作原理

1,上電時,WS2812數據IO為低電平保持。

2,空閑時,IO為低電平。

3,數據發(fā)送完畢后,保持電平,超過規(guī)格書上定義的RESET時間(只有低電平時間超過280us,就可以認為是RESET.)

先看下數據的時序

9812e0f2-6622-11ed-8abf-dac502259ad0.png

如下是每24bit的組成。注意,順序不是RGB888,而是GRB888。一般我們取顏色的數值,都是RGB順序,所以這里在代碼里實現的時候,會需要做一下移位。另外,需要注意的是,需要高位先發(fā)(MSB)。

982f4490-6622-11ed-8abf-dac502259ad0.png

時序波形圖。關鍵在于用什么方法去表示Bit的波形,網絡上的方法有很多。例如PWM,也有用SPI。今天我們就先用一種簡單方法實行吧,IO口模擬是不錯的選擇。

9846258e-6622-11ed-8abf-dac502259ad0.png

《新建工程》

1、萬事從新建工程開始,打開STM32CubeMX

986a0ca6-6622-11ed-8abf-dac502259ad0.png


2、在搜索框內搜索 我們的開發(fā)板型號,也就是STM32G070RB,好的這樣工程就新建好的,

9896d09c-6622-11ed-8abf-dac502259ad0.png


3、配置時鐘樹,如下圖所示。

98c6ee9e-6622-11ed-8abf-dac502259ad0.png


4、接下來配置引腳 ,這里我們采用的是PWM+DMA的方式來驅動WS2812,通過WS2812的手冊可以得知驅動需要800KHZ的頻率好的我們現在來配置定時器,這里以定時器1為例來配置。如下圖所示。計算方法79=(64M/800K)-1得出。下面的Pulse是指一個周期的脈沖數

98ebcfde-6622-11ed-8abf-dac502259ad0.png

5、下面我們開始配置DMA,如下圖所示配置

99134fe6-6622-11ed-8abf-dac502259ad0.png


6、好的到這里就可以生成代碼

993a6374-6622-11ed-8abf-dac502259ad0.png

好的到這里我們就已經把我們需要用到的資源初始化完成了

《開始寫代碼》

1、打開我們上次教程生成的代碼;我們打開工程,將一下代碼復制到下圖所在位置

#define ONE_PULSE        (59)                           //1 碼計數個數
#define ZERO_PULSE       (29)                           //0 碼計數個數
#define RESET_PULSE       (80)                          //80 復位電平個數(不能低于40)
#define LED_NUMS         (12)                            //led 個數
#define LED_DATA_LEN     (24)                           //led 長度,單個需要24個字節(jié)
#define WS2812_DATA_LEN  (LED_NUMS*LED_DATA_LEN)        //ws2812燈條需要的數組長度
uint16_t static RGB_buffur[RESET_PULSE + WS2812_DATA_LEN] = { 0 };

99660524-6622-11ed-8abf-dac502259ad0.png


2、接下來就是DMA傳輸完成回調函數(根據你使用的定時器配置),以下函數都復制到main.c 的/* USER CODE BEGIN 4 */代碼區(qū)

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
   HAL_TIM_PWM_Stop_DMA(&htim1,TIM_CHANNEL_1);
}

3、下面就是今天的最后一步WS2812的驅動函數了,以下函數的作用是根據WS2812的數量將燈的GRB顏色數據寫到需要DMA傳送的數組中

void WS281x_SetPixelColor(uint16_t n, uint32_t GRBColor)
{
   uint8_t i;
   if (n < LED_NUMS)
   {
      for (i = 0; i < 24; ++i)
      RGB_buffur[24 * n + i] = (((GRBColor << i) & 0X800000) ? ONE_PULSE : ZERO_PULSE);
   }
}

4、將三個顏色的數據合并成GRB數據

uint32_t WS281x_Color(uint8_t red, uint8_t green, uint8_t blue)
{
   return green << 16 | red << 8 | blue;
}

5、這是一個簡單的顏色漸變算法 ,感興趣的可以研究研究

uint32_t Wheel(uint8_t WheelPos)
{
   WheelPos = 255 - WheelPos;
   if (WheelPos < 85)
   {
      return WS281x_Color(255 - WheelPos * 3, 0, WheelPos * 3);
   }
   if (WheelPos < 170)
   {
      WheelPos -= 85;
      return WS281x_Color(0, WheelPos * 3, 255 - WheelPos * 3);
   }
   WheelPos -= 170;
   return WS281x_Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

6、這里我簡單的寫了兩個演示程序

void Mode2_LED(uint8_t wait)
{
   uint32_t timestamp = HAL_GetTick();
   uint16_t i;
   static uint8_t j;
   static uint32_t next_time = 0;
   uint32_t flag = 0;
   if (next_time < wait)
   {
      if ((uint64_t)timestamp + wait - next_time > 0)
         flag = 1;
   }
   else if (timestamp > next_time)
   {
      flag = 1;
   }
   if (flag)
   {
      j++;
      next_time = timestamp + wait;
      for (i = 0; i < LED_NUMS; i++)
      {
         WS281x_SetPixelColor(i, Wheel((i + j) & 255));
      }
   }
   HAL_TIM_PWM_Start_DMA(&htim1,TIM_CHANNEL_1,(uint32_t *)RGB_buffur,RESET_PULSE + WS2812_DATA_LEN);
}
void Mode1_LED(uint8_t wait)
{
   uint32_t timestamp = HAL_GetTick();
   uint16_t i;
   static uint8_t j;
   static uint32_t next_time = 0;
   static uint8_t loop = 0;
   if (loop == 0)
      next_time = timestamp;
   loop = 1; //首次調用初始化
 
   if ((timestamp > next_time)) // && (timestamp - next_time < wait*5))
   {
      j++;
      next_time = timestamp + wait;
      for (i = 0; i < LED_NUMS; i++)
      {
         WS281x_SetPixelColor(i, Wheel(((i * 256 / (LED_NUMS)) + j) & 255));
      }
   }
   HAL_TIM_PWM_Start_DMA(&htim1,TIM_CHANNEL_1,(uint32_t *)RGB_buffur,RESET_PULSE + WS2812_DATA_LEN);
}

7、在主函數中直接調用Mode1_LED和Mode2_LED函數即可。

OK 到這里就結束了,點亮之后相當炫酷。,大家可以借鑒 ,修改出自己獨特的風格。



審核編輯 :李倩


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

    關注

    2309

    文章

    11161

    瀏覽量

    373363
  • 開發(fā)板
    +關注

    關注

    26

    文章

    6288

    瀏覽量

    117975

原文標題:基于STM32G070RB的七彩星空燈教程

文章出處:【微信號:airX嵌入式,微信公眾號:airX嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    深度剖析STM32G070CB/KB/RB微控制器:特性、功能與應用解析

    深度剖析STM32G070CB/KB/RB微控制器:特性、功能與應用解析 在當今的電子科技領域,微控制器(MCU)的應用無處不在。作為電子工程師,我們時常需要面對眾多的MCU產品進行選型和設計,以
    的頭像 發(fā)表于 02-26 18:00 ?976次閱讀

    STM32F070CB/RB/C6/F6:高效低功耗32位微控制器的卓越之選

    STM32F070CB/RB/C6/F6:高效低功耗32位微控制器的卓越之選 在當今電子設備飛速發(fā)展的時代,高性能、低功耗的微控制器需求日益增長。ST公司推出的STM32F070CB/RB
    的頭像 發(fā)表于 02-10 15:35 ?136次閱讀

    STMicroelectronics NUCLEO-C071RB STM32 Nucleo-64開發(fā)板數據手冊

    STMicroelectronics NUCLEO-C071RB STM32 Nucleo-64開發(fā)板帶有板載STM32C071RB MCU,支持Arduino和ST morpho連接。該板為用戶
    的頭像 發(fā)表于 10-17 16:47 ?826次閱讀
    STMicroelectronics NUCLEO-C071<b class='flag-5'>RB</b> <b class='flag-5'>STM32</b> Nucleo-64開發(fā)板數據手冊

    星空投影方案開發(fā)設計案例

    面臨的挑戰(zhàn)。今天,深圳三佛科技將介紹一款基于輝芒微8 位 MCU 的星空投影儀控制方案,它不僅能夠滿足上述需求,還能在極短的開發(fā)周期內實現量產,為市場帶來全新的選擇。 方案定位 星空投影方案面向三類
    發(fā)表于 09-03 15:45

    STM32G070RBT6TR ADC采集定點電壓誤差較大,有沒有優(yōu)化方向?

    STM32G070RBT6TRADC采集定點電壓誤差較大,有沒有優(yōu)化方向
    發(fā)表于 07-22 07:24

    STM32CubeMX配置STM32G070RBT6TR時為什么無法使能PVD中斷?

    STM32CubeMX 配置STM32G070RBT6TR時無法使能PVD中斷
    發(fā)表于 06-18 07:59

    STM32CubeMX配置STM32G070RBT6TR時無法使能PVD中斷怎么辦?

    STM32CubeMX 配置STM32G070RBT6TR時無法使能PVD中斷
    發(fā)表于 06-16 06:32

    stm32g070數據手冊和使用手冊

    電子發(fā)燒友網站提供《stm32g070數據手冊和使用手冊.pdf》資料免費下載
    發(fā)表于 06-13 16:21 ?16次下載

    ON Semiconductor RB521S30T1G參數特性與EDA模型 數據手冊介紹

    ON Semiconductor RB521S30T1G參數特性與EDA模型 數據手冊介紹
    的頭像 發(fā)表于 05-28 16:45 ?1.5w次閱讀
    ON Semiconductor <b class='flag-5'>RB521S30T1G</b>參數特性與EDA模型 數據手冊介紹

    萬能七彩充開關電源電器的制作

    手機萬能七彩充電器的制作過程JC820型手機萬能充電器套件制成后,適合充容量為250~3000mA鋰離子、鎳氫電池;充電時,七彩燈閃爍,指示的顏色依次變化,發(fā)出絢麗多彩的七彩光芒,飽
    發(fā)表于 03-26 14:17

    燈光太普通?快來試試這款多模式的七彩燈方案!

    爆閃模式:紅、綠、藍、黃、青、粉、白種顏色交替爆閃;七彩跑馬流水燈:在偶數流水模式下,偶數LED依次點亮,奇數LED熄滅。流水達到設定數后,切換顏色繼續(xù)顯示
    的頭像 發(fā)表于 03-17 18:22 ?1316次閱讀
    燈光太普通?快來試試這款多模式的<b class='flag-5'>七彩</b>燈方案!

    NRK3301離線語音識別模塊在七彩燈上的應用方案

    傳統(tǒng)七彩燈依賴遙控器或APP的操作方式,總在關鍵時刻“掉鏈子”。如今,語音控制正成為智能照明的“新寵”——只需一句話,燈光顏色、亮度、模式隨心切換。而實現這種“聲控”的核心,正是藏在燈帶里
    的頭像 發(fā)表于 03-10 14:04 ?1079次閱讀
    NRK3301離線語音識別模塊在<b class='flag-5'>七彩</b>燈上的應用方案

    最新!智慧大應用場景案例獨家匯總

    最新!智慧大應用場景案例獨家匯總
    的頭像 發(fā)表于 03-07 10:10 ?1313次閱讀

    STM32G070 UART串口,低波特率傳送數據時,TIMER出現嚴重延時現象如何解決?

    STM32G070, UART串口,低波特率傳送數據時,TIMER出現嚴重延時現象,傳送數據長的話,導致系統(tǒng)重啟。如何解決?
    發(fā)表于 03-07 07:07

    燈光太刺眼?太單調?試試這樣調!

    七彩流光智能調光方案你是否也曾為燈光刺眼而煩惱?或是覺得家里的燈光一成不變,缺乏新意?七彩流光智能調光方案為你帶來全新解決方案!核心亮點:無極調光:通過長按(≥500ms)調節(jié)亮度,從柔和的5%到
    的頭像 發(fā)表于 03-04 18:24 ?237次閱讀
    燈光太刺眼?太單調?試試這樣調!