在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32C0開發(fā)(1)----SPI 驅(qū)動(dòng)WS2812燈珠

嵌入式單片機(jī)MCU開發(fā) ? 來源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2023-12-01 16:47 ? 次閱讀

概述

本文介紹了如何使用STM32微控制器,結(jié)合STM32CubeMX配置工具和SPI通訊接口,來驅(qū)動(dòng)和控制WS2812 LED燈帶。這是一個(gè)集硬件連接、軟件配置和編程開發(fā)于一體的綜合性項(xiàng)目,目標(biāo)是實(shí)現(xiàn)對(duì)LED燈帶顏色和亮度的精確控制。

最近在弄ST的課程,需要樣片的可以加群申請(qǐng):615061293 。

在這里插入圖片描述

視頻教學(xué)

[https://www.bilibili.com/video/BV1X94y157W8/

樣品申請(qǐng)

[https://www.wjx.top/vm/OhcKxJk.aspx#]
在這里插入圖片描述

源碼下載

[https://download.csdn.net/download/qq_24312945/88489586

芯片級(jí)聯(lián)方法

在這里插入圖片描述

芯片在上電復(fù)位以后,接收DIN端打來的數(shù)據(jù),接收夠24bit后,DO端口開始轉(zhuǎn)發(fā)數(shù)據(jù),供下一個(gè)芯片提供輸入數(shù)據(jù)。在轉(zhuǎn)發(fā)之前,DO口一直拉低。此時(shí)燈珠將不接收新的數(shù)據(jù),內(nèi)置RGB芯片根據(jù)接收到的24bit數(shù)據(jù)后產(chǎn)生的不同占空比信號(hào),展現(xiàn)不同亮度。如果DIN端輸入信號(hào)為RESET信號(hào),芯片將接收到的數(shù)據(jù)送顯示,芯片將在該信號(hào)結(jié)束后重新接收新的數(shù)據(jù),在接收完開始的24bit數(shù)據(jù)后,通過DO口轉(zhuǎn)發(fā)數(shù)據(jù),燈珠在沒有接收到RESET碼前,RGB亮度保持不變,當(dāng)接收到80us以上低電平RESET碼后,燈珠內(nèi)部RGB芯片將根據(jù)剛才接收到的24bit數(shù)據(jù)后產(chǎn)生的不同占空比信號(hào),展現(xiàn)不同亮度。

在這里插入圖片描述

數(shù)據(jù)傳輸

在這里插入圖片描述
24bit數(shù)據(jù)結(jié)構(gòu):

在這里插入圖片描述

時(shí)序

時(shí)序波形圖如下所示。

在這里插入圖片描述
在這里插入圖片描述

SPI配置

將SPI的配置速度設(shè)為6M,數(shù)據(jù)寬度設(shè)為8位。
CPHA配置為第二邊沿采樣;在第一個(gè)跳變沿時(shí),MOSI在空閑狀態(tài)保持高電平,而在第二個(gè)跳變沿,它會(huì)保持上一次傳輸?shù)淖罱K電平。由于發(fā)送數(shù)據(jù)的最后一位總是低電平,這樣配置可以避免WS2812誤判。CPOL設(shè)置為高,確保SCK在空閑時(shí)保持高電平狀態(tài)。

在這里插入圖片描述

系統(tǒng)采用單總線協(xié)議,通過總線上高低電平的時(shí)長(zhǎng)來區(qū)分邏輯0和1。WS2811工作在800kHz頻率下,將SPI設(shè)置為6.4MHz—即其工作頻率的8倍—可以確保每個(gè)字節(jié)(8位)正好對(duì)應(yīng)一個(gè)邏輯位。在這種設(shè)置下,‘11111000’(0xF8)代表邏輯1,‘11000000’(0xC0)代表邏輯0。

在這里插入圖片描述

邏輯0下發(fā)送的數(shù)據(jù)為11000000’(0xC0)。
邏輯0下高電平位320ns。

在這里插入圖片描述

邏輯0下低電平位1.01us。

在這里插入圖片描述

邏輯1下發(fā)送的數(shù)據(jù)為‘11111000’(0xF8)。
邏輯1下高電平位830ns。

在這里插入圖片描述
邏輯1下低電平位500ns。
在這里插入圖片描述

這種精確的時(shí)序配置和電平控制對(duì)于確保WS2812燈帶的正確驅(qū)動(dòng)至關(guān)重要,可以通過上述配置來優(yōu)化SPI接口的性能,確保與WS2812的高效通信

CPHA配置

CPHA配置為第二邊沿采樣下數(shù)據(jù)傳輸結(jié)束如下所示。

在這里插入圖片描述
CPHA配置為第二邊沿采樣下數(shù)據(jù)傳輸結(jié)束如下所示。

在這里插入圖片描述

由于RESET Code為低電平,且要大于80us,所以數(shù)據(jù)傳輸完畢必須為低電平。

在這里插入圖片描述

代碼

在main.c中添加頭文件。

/* USER CODE BEGIN Includes */
#include "ws2812.h"
#include < string.h >
/* USER CODE END Includes */

在main.c中添加函數(shù)申明和移位操作。

/* USER CODE BEGIN 0 */
extern tWs2812bCache_TypeDef gWs2812bDat[WS2812B_AMOUNT];

void move_Front()
{
	uint8_t i;
	uint8_t temp[3];
	temp[0] = gWs2812bDat[0].R;
	temp[1] = gWs2812bDat[0].G;
	temp[2] = gWs2812bDat[0].B;	
	for (i = 0; i < WS2812B_AMOUNT-1; i++)
	{
		gWs2812bDat[i].R = gWs2812bDat[i+1].R;
		gWs2812bDat[i].G = gWs2812bDat[i+1].G;
		gWs2812bDat[i].B = gWs2812bDat[i+1].B;
	}
		gWs2812bDat[7].R = temp[0];
		gWs2812bDat[7].G = temp[1];
		gWs2812bDat[7].B = temp[2];
}


/* USER CODE END 0 */

添加初始化顯示。

/* USER CODE BEGIN 2 */
	WS2812B_Task();
	HAL_Delay(1000);
  /* USER CODE END 2 */

添加流水燈。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	WS2812B_Task();	
	move_Front();
	HAL_Delay(100);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

ws2812.c

#include "ws2812.h"
#include "spi.h"

//燈條顯存SPI數(shù)據(jù)緩存
uint8_t gWs2812bDat_SPI[WS2812B_AMOUNT * 24] = {0};	
//燈條顯存
tWs2812bCache_TypeDef gWs2812bDat[WS2812B_AMOUNT] = {

//R    G      B
0XFF, 0X00, 0X00,	//0
0X00, 0XFF, 0X00,	//1
0X00, 0X00, 0XFF,	//2
0X00, 0XFF, 0XFF,	//3
0XFF, 0X00, 0XFF,	//4
0XFF, 0XFF, 0X00,	//5
0XFF, 0XFF, 0XFF,	//6
0X00, 0X00, 0X00,	//7
};
		
void WS2812b_Set(uint16_t Ws2b812b_NUM, uint8_t r,uint8_t g,uint8_t b)
{
	uint8_t *pR = &gWs2812bDat_SPI[(Ws2b812b_NUM) * 24 + 8];
	uint8_t *pG = &gWs2812bDat_SPI[(Ws2b812b_NUM) * 24];
	uint8_t *pB = &gWs2812bDat_SPI[(Ws2b812b_NUM) * 24 + 16];
	
	for(uint8_t i = 0; i <  8; i++) {
		if(g & 0x80) {
			*pG = CODE_1;
		}           
		else {           
			*pG = CODE_0;
		}           
		if(r & 0x80) {           
			*pR = CODE_1;
		}           
		else {           
			*pR = CODE_0;
		}           
		if(b & 0x80) {           
			*pB = CODE_1;
		}           
		else {           
			*pB = CODE_0;
		}
		r < <= 1;
		g < <= 1;
		b < <= 1;
		pR++;
		pG++;
		pB++;
	}
}
void WS2812B_Task(void)
{
	uint8_t dat = 0;
	
	//將gWs2812bDat數(shù)據(jù)解析成SPI數(shù)據(jù)
	for(uint8_t iLED = 0; iLED < WS2812B_AMOUNT; iLED++)
	{
		WS2812b_Set(iLED, gWs2812bDat[iLED].R, gWs2812bDat[iLED].G, gWs2812bDat[iLED].B);
	}
	//總線輸出數(shù)據(jù)
	HAL_SPI_Transmit(&hspi1, gWs2812bDat_SPI, sizeof(gWs2812bDat_SPI),0XFFFF);
	//使總線輸出低電平
	HAL_SPI_Transmit(&hspi1, &dat, 1,0XFFFF);
	//幀信號(hào):一個(gè)大于50us的低電平
	HAL_Delay(1);	
}

ws2812.h

#ifndef __WS2812_H__
#define __WS2812_H__

#include < stdint.h >

//            編碼 0 : 11000000
#define CODE_0		0xC0
//            編碼 1 : 11111000
#define CODE_1		0xF8
/*ws2812b燈珠數(shù)量*/
#define WS2812B_AMOUNT		8

typedef struct
{
	uint8_t R;
	uint8_t G;
	uint8_t B;
} tWs2812bCache_TypeDef;

extern tWs2812bCache_TypeDef gWs2812bDat[WS2812B_AMOUNT];

void WS2812b_Set(uint16_t Ws2b812b_NUM, uint8_t r,uint8_t g,uint8_t b);
void WS2812B_Task(void);

#endif
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1840

    瀏覽量

    85291
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1706

    瀏覽量

    91581
  • WS2812
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    6180
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14809
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    瑞薩e2studio(28)----SPI 驅(qū)動(dòng)WS2812

    本文介紹了如何使用瑞薩RA微控制器,結(jié)合E2STUDIO配置工具和SPI通訊接口,來驅(qū)動(dòng)和控制WS2812 LED帶。這是一個(gè)集硬件連接、軟件配置和編程
    的頭像 發(fā)表于 12-01 16:48 ?1994次閱讀
    瑞薩e2studio(28)----<b class='flag-5'>SPI</b> <b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>WS2812</b><b class='flag-5'>燈</b><b class='flag-5'>珠</b>

    stm32F767 控制WS2812的問題

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

    WS2812B RGB全彩LED

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

    STM32控制WS2812 RGB帶的代碼分享

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

    Arduino控制WS2812帶的方法

    形與一個(gè)5050LED相同,每個(gè)元件即為一個(gè)像素點(diǎn)。像素點(diǎn)內(nèi)部包含了智能數(shù)字接口數(shù)據(jù)鎖存信號(hào)整形放大電路,還包括有高精度的內(nèi)部振蕩器和可編程電流控制部分,有效保證了像素點(diǎn)的顏色高度一致。1)FastLED庫(kù)FastLED 是
    發(fā)表于 01-12 08:08

    為什么用樹莓派驅(qū)動(dòng)WS2812會(huì)不亮呢

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

    STM32F103C8T6+PWM+DMA驅(qū)動(dòng)WS2812帶的方法

    #STM32+PWM+DMA驅(qū)動(dòng) WS2812帶#文章目錄1.理論:2代碼:理論:使用STM32F10
    發(fā)表于 02-22 06:59

    【感芯科技MC3172開發(fā)板體驗(yàn)】WS2812音樂

    首先是確保能夠正常驅(qū)動(dòng)WS2812,這里我借鑒了一位大佬的文章:【代碼分享】用spi驅(qū)動(dòng)任意數(shù)量ws2812 / 感芯科技 / WhyCa
    發(fā)表于 06-09 00:49

    【悟空派H3開發(fā)板免費(fèi)體驗(yàn)】基于spi驅(qū)動(dòng)WS2812

    使用spi引腳驅(qū)動(dòng)WS2812,接線端口如下 程序如下spi_ws2812.c: #include \"sys/types.h\" #include \"sys
    發(fā)表于 10-10 22:33

    如何進(jìn)行WS2812的面板制作詳細(xì)資料合集免費(fèi)下載

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

    STM32使用LL庫(kù)PWM的DMA模式驅(qū)動(dòng)ws2812

    驅(qū)動(dòng)n個(gè),當(dāng)然n是有限制的。時(shí)序超級(jí)簡(jiǎn)單,也有一定難度。類似的帖子網(wǎng)上有很多,在此不再贅述。WS2812驅(qū)動(dòng)方式大概有以下幾種:1.使用GPIO模擬,中間加延時(shí)實(shí)現(xiàn)“
    發(fā)表于 11-30 10:21 ?66次下載
    <b class='flag-5'>STM32</b>使用LL庫(kù)PWM的DMA模式<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>ws2812</b>

    STM32F103C8T6+PWM+DMA驅(qū)動(dòng) WS2812

    #STM32+PWM+DMA驅(qū)動(dòng) WS2812帶#文章目錄1.理論:2代碼:理論:使用STM32F10
    發(fā)表于 12-27 19:29 ?214次下載
    <b class='flag-5'>STM32F103C</b>8T6+PWM+DMA<b class='flag-5'>驅(qū)動(dòng)</b> <b class='flag-5'>WS2812</b><b class='flag-5'>燈</b>帶

    最簡(jiǎn)WS2812類似RGB驅(qū)動(dòng)方法

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

    迪文屏控制WS2812氛圍

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

    論如何使用WS2812以及類似

    ? ?WS2812 LED,這是一種非常流行的可尋址RGB LED。每個(gè)WS2812 LED內(nèi)部集成了控制電路,因此可以通過一個(gè)數(shù)據(jù)輸入線來單獨(dú)控制每一個(gè)LED的顏色和亮度。這種特
    的頭像 發(fā)表于 09-30 15:11 ?450次閱讀
    論如何使用<b class='flag-5'>WS2812</b>以及類似<b class='flag-5'>燈</b><b class='flag-5'>珠</b>
    主站蜘蛛池模板: 色www永久免费视频| 四虎影院在线看| 四月婷婷七月婷婷综合| 久久综合色视频| bt天堂在线最新版www| 日本噜噜影院| 欧美黑人xxxx猛牲大交| 伊人精品久久久大香线蕉99| 欧美一级欧美三级在线观看| www.色.com| 在线观看视频免费入口| 在线看片地址| 久草色在线| 青青伊人91久久福利精品| 清朝荒淫牲艳史在线播放| 色老头在线官方网站| 又长又大又粗又硬3p免费视| jlzzjlzzjlzz亚洲女| 亚洲人成网站在线| 韩国三级视频在线| 国产精品自在线天天看片 | 色婷婷在线视频| ww久久| 亚洲一级色| 狠狠色丁香婷婷综合欧美| 国产资源视频| 婷五月综合| 夜夜澡人人爽人人喊_欧美| 天天上天天操| 色噜噜噜噜噜在线观看网站| 欧美日韩国产一区二区| 欧美午夜精品久久久久久黑人| 国产盗摄女厕美女嘘嘘| 国产青草| h在线免费| 欧美啪啪小视频| 国产亚洲片| 色婷婷基地| 免费观看老外特级毛片| 亚洲欧洲一区| 午夜精品久久久久久久|