基于CubeMX-STM32 驱动 WS2812B(__nop()函数方式)_stmcubemx stm32l051c8 io口驱动ws2812b-程序员宅基地

技术标签: # STM32  嵌入式硬件  单片机  

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





 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39567970/article/details/120909472

智能推荐

Echarts 计算每份占比(等分)_echarts 等分-程序员宅基地

文章浏览阅读814次。option = { series: [ { type: "gauge", startAngle: 190, endAngle: -10, min: 0, max: 100, axisLine: { lineStyle: { width: 15, color: [ [0.3, "#91BB7E".._echarts 等分

Jemeter_jemeter官网下载-程序员宅基地

文章浏览阅读225次。https://www.cnblogs.com/monjeo/p/9330464.html_jemeter官网下载

从工作的角度看 CV/NLP/推荐系统选哪个?-程序员宅基地

文章浏览阅读711次。前言学院第一至第四期具有求职意向的同学中,目前已经有80%的同学拿到了国内外名企的AI算法岗位offer,或者国外名校的AI 硕士、全奖博士录取 offer。在大家的认可下,我们开始了..._cv和nlp哪个好找工作

eNSP网络构建—配置无线网络_ensp无线2个信号访问同一个地址-程序员宅基地

文章浏览阅读1.1w次,点赞14次,收藏117次。需求分析对于小型局域网中, 对于接入设备的需求,需要在局域网中部署无线网络,通过无线控制器AC管理网络中所有的无线AP设备,下发无线配置信息。无线网络发布2 4G和5G信号,满足不同设备的连接使用。拓扑图:注意:防火墙使用USG5500 ,路由器使用AR2220 , AC使用AC6005 , AP使用AP2050。拓扑描述:防火墙连接外网地址为192.168.12.9/24,路由..._ensp无线2个信号访问同一个地址

关于matlab的简介,Matlab 简介-程序员宅基地

文章浏览阅读1.3k次。&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMatlab(Matrix Laboratory)的中文名叫矩阵实验室,是一款著名的科学计算软件,也指这个软件中使用的编程语言.这里仅介绍最基本的 Matlab 功能和语法,且仅介绍本书使用到的功能.界面介绍图 1:Matlab 的 IDE 界面Matlab 的编程界面(图..._matlab产品的中文名称

python有哪些主要功能包括_python是什么 特点及功能-程序员宅基地

文章浏览阅读3.9k次。随着信息时代的发展,计算机行业的就业前景相当不错,通过了解,最近有很多小伙伴打算学习python,那么python是什么?它的特点和功能有哪些呢?相关内容如下,赶快来了解吧!python是什么Python是一种跨平台的计算机程序设计语言,是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开..._python中程序的功能是什么

随便推点

H3C模拟器配置vlan-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏7次。Valn 11组网需求• 交换机GE_2上的VLAN 5 和VLAN 10 为Primary VLAN,其上层端口GigabitEthernet1/0/1需要允许VLAN 5 和VLAN 10 的报文携带VLAN Tag 通过。• 交换机GE_2 的下行端口GigabitEthernet1/0/2 允许Secondary VLAN 2 通过,GigabitEthernet1/0/3 允许Sec..._新华3模拟器vlan配置

img撑满全屏的方法(img非背景图)_img 铺满-程序员宅基地

文章浏览阅读4.7w次,点赞8次,收藏15次。我有一个模板,想按常规做一个div里面放置一个img图片,并且让图片铺满容器,自适应容器大小。HTML结构代码如下(在这个盒模型上,我已经放置了一些不重要的样式)。div style="height:270px;width:400px;border:2px black solid;"> a href="http://www.paipk.com">img src="..." alt="拍_img 铺满

UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb0 in position 5: invalid start byte_ebpf bcc unicodedecodeerror: 'utf-8' codec can't d-程序员宅基地

文章浏览阅读947次。UnicodeDecodeError: 'gbk' codec can't decode byte 0xfa in position 4669: illegal multibyte sequenceUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 5: invalid start bytewith open('进线汇总20201211.csv',encoding='utf8') as f: t = f._ebpf bcc unicodedecodeerror: 'utf-8' codec can't decode byte 0xb0 in positio

使用条件序列GAN改进NMT_improving neural machine translation with conditio-程序员宅基地

文章浏览阅读1.3k次。使用条件序列GAN改进NMT原文《Improving Neural Machine Translation with Conditional Sequence Generative Adversarial Nets》课程作业,因为要导出pdf所以粘贴到CSDN了,34章是笔者翻译的部分。当一篇post吧,求别喷,有问题请留言我一定改,一定改。摘要本文提出了一种将GANs应用于NMT领域的方..._improving neural machine translation with conditional sequence generative ad

产品周报第33期|完善铁粉规则,优化原创保护策略,升级创作中心的数据展示,开放业界专家自定义域名权益……_创作者中心铁粉数0-程序员宅基地

文章浏览阅读5k次。目录一、博客产品功能完善1、完善铁粉说明规则2、创作中心专栏数据升级3、发文助手新增「添加模版」指引4、免费开放业界专家自定义域名权益5、其他优化二、问答产品体验优化1、回答链接和链接详情页调整2、PC端提问页优化3、创作中心页面的问答列表优化三、首页热榜及优质内容推进方面的改进四、吐槽提建议直通车,直达CSDN各产品与运营人员查看往期改进hello,大家好,这里是「CSDN产品周报」第33期。本次更新主要涉及博客、问答及首页,欢迎大家详细了解和使_创作者中心铁粉数0

自建网盘之 NextCloud 终极记录-程序员宅基地

文章浏览阅读1.7k次。自建过许多网盘,试过 可道云、Seafile、FileRun、Nextcloud,但Nextcloud的如下特性吸引了我:完整、好用的客户端,包括 windows、mac、android、ios ...强大的插件扩展,如 Talk, Contacts, notes, Maps ...完整的第三方扩展,支持 Amazie S3, OneDrive, ..._可道云 nextcloud seafile