STM32外设驱动_WS2812B

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);
}





 

猜你喜欢

转载自blog.csdn.net/qq_39567970/article/details/120909472