WS2812B
引脚定义
特性参数
数据传输
48MHz 主频下的代码
.h 文件
#ifndef _WS2812B_48_H_
#define _WS2812B_48_H_
#include "gpio.h"
#define WS2812B_Port GPIOB
#define WS2812B_Pin GPIO_PIN_12
#define WS2812B_Pin_H (WS2812B_Port->BSRR |= WS2812B_Pin)
#define WS2812B_Pin_L (WS2812B_Port->BRR |= WS2812B_Pin)
#define Core_Clock 48000000
void WS2812B_Red(void);
#endif
.c 文件
#include "WS2812B_48.h"
/*******************************************************************************
* Function Name : WS2812B_Write0
* Description : 向 WS2812B 的端口写 0 码
* Input : 无
* Output : 无
* Return : 无
*******************************************************************************/
void WS2812B_Write0(void)
{
WS2812B_Pin_H;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
WS2812B_Pin_L;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
}
/*******************************************************************************
* Function Name : WS2812B_Write1
* Description : 向 WS2812B 的端口写 1 码
* Input : 无
* Output : 无
* Return : 无
*******************************************************************************/
void WS2812B_Write1(void)
{
WS2812B_Pin_H;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
WS2812B_Pin_L;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
}
/*******************************************************************************
* Function Name : WS2812B_Write24Bit
* Description : 向 WS2812B 的端口写 24 bit 数据、控制一个灯
* Input : 无
* Output : 无
* Return : 无
*******************************************************************************/
void WS2812B_Write24Bit(char Red,char Green,char Blue)
{
for(char i=0;i<8;i++)
{
if((Green>>i)&0x01)
{
WS2812B_Write1();
}
else
{
WS2812B_Write0();
}
}
for(char i=0;i<8;i++)
{
if((Red>>i)&0x01)
{
WS2812B_Write1();
}
else
{
WS2812B_Write0();
}
}
for(char i=0;i<8;i++)
{
if((Blue>>i)&0x01)
{
WS2812B_Write1();
}
else
{
WS2812B_Write0();
}
}
}
void WS2812B_Red(void)
{
WS2812B_Write24Bit(0xff,0x00,0x00);
}
72MHz 下的代码
.h 文件
#ifndef _WS2812B_72_H_
#define _WS2812B_72_H_
#include "gpio.h"
#define WS2812B_Port GPIOB
#define WS2812B_Pin GPIO_PIN_12
#define WS2812B_Pin_H (WS2812B_Port->BSRR |= WS2812B_Pin)
#define WS2812B_Pin_L (WS2812B_Port->BRR |= WS2812B_Pin)
#define Core_Clock 72000000
void WS2812B_Red(void);
#endif
.c 文件
#include "WS2812B_72.h"
/*******************************************************************************
* Function Name : WS2812B_Write0
* Description : 向 WS2812B 的端口写 0 码
* Input : 无
* Output : 无
* Return : 无
*******************************************************************************/
void WS2812B_Write0(void)
{
WS2812B_Pin_H;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
WS2812B_Pin_L;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
}
/*******************************************************************************
* Function Name : WS2812B_Write1
* Description : 向 WS2812B 的端口写 1 码
* Input : 无
* Output : 无
* Return : 无
*******************************************************************************/
void WS2812B_Write1(void)
{
WS2812B_Pin_H;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
WS2812B_Pin_L;
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();
}
/*******************************************************************************
* Function Name : WS2812B_Write24Bit
* Description : 向 WS2812B 的端口写 24 bit 数据、控制一个灯
* Input : 无
* Output : 无
* Return : 无
*******************************************************************************/
void WS2812B_Write24Bit(char Red,char Green,char Blue)
{
for(char i=0;i<8;i++)
{
if((Green>>i)&0x01)
{
WS2812B_Write1();
}
else
{
WS2812B_Write0();
}
}
for(char i=0;i<8;i++)
{
if((Red>>i)&0x01)
{
WS2812B_Write1();
}
else
{
WS2812B_Write0();
}
}
for(char i=0;i<8;i++)
{
if((Blue>>i)&0x01)
{
WS2812B_Write1();
}
else
{
WS2812B_Write0();
}
}
}
void WS2812B_Red(void)
{
WS2812B_Write24Bit(0xff,0x00,0x00);
}