WS2812B驱动

devtools/2025/1/16 1:51:54/
#include "stm32f10x.h"
#include "TIM2.h"
#include "DMA1.h"//#define WS2812B_LED_QUANTITY	32  //灯珠数量
#define WS2812B_LED_QUANTITY 12 //灯珠数量//定义数组 类型符 数组名[常量]
uint32_t WS2812B_Buf[WS2812B_LED_QUANTITY];	//0xGGRRBB    正常的数据口输入,然后配置就行,绿红蓝总共24位,只有32               
uint16_t WS2812B_Bit[24*WS2812B_LED_QUANTITY+1];//灯珠数量*24bit+1 颜色位数+复位信号 根据数据手册可知还要加复位信号0(正常的0),因此需要写入 num24+reset(reset=?自己调) 位。
uint8_t WS2812B_Flag;void WS2812B_IRQHandler(void);void WS2812B_Init(void)
{DMA1_SetIRQHandler(WS2812B_IRQHandler);//把WS2812B_IRQHandler赋给DMA1_HandlerDMA1_Init((uint32_t) (&WS2812B_Bit));//灯位量的地址存放到DMA  这时DMA就是灯珠的量 强制类型转换 不足的高位补0TIM2_Init();//定时器
} //用TIM2开PWM 送给DMAvoid WS2812B_ClearBuf(void)//把LED的RGB数组值清零,全部输出0码,变成黑色,即不发光
{uint8_t i;for(i=0;i<WS2812B_LED_QUANTITY;i++)  {WS2812B_Buf[i]=0x000000;//24位的二进制数    6位的16进制数}
}void WS2812B_SetBuf(uint32_t Color)  //设置显示相同的颜色
{uint8_t i;for(i=0;i<WS2812B_LED_QUANTITY;i++)  {WS2812B_Buf[i]=Color;//BUF是颜色,设置成同一个颜色,初始统一设置成不发光}
}void WS2812B_UpdateBuf(void) //30和60对应不同的高电平时间也对应了时序的0码和1码 占空比控制亮灭   CCR和AAR+1共同决定的
{uint8_t i,j;for(j=0;j<WS2812B_LED_QUANTITY;j++)  //遍历每个LED{for(i=0;i<24;i++)    //遍历每个LED的颜色数据的每一位   	10000000 00000000  00000000{if(WS2812B_Buf[j]&(0x800000>>i)){WS2812B_Bit[j*24+i+1]=60;}//0x800000为二进制的1加23个0,>>:右移  else{WS2812B_Bit[j*24+i+1]=30;} //每一位,取值范围是0到23,所以再加1}}DMA1_Start(24*WS2812B_LED_QUANTITY+1);TIM2_Cmd(ENABLE);while(WS2812B_Flag==0);WS2812B_Flag=0;
}void WS2812B_IRQHandler(void)    //定时器2 开PWM  直接就是根据时序占空比设置控制灯条
{TIM2_SetCompare1(0);//pwm设置TIM2_Cmd(DISABLE);//关闭定时器   WS2812B_Flag=1;
}

这段代码用于控制WS2812B LED灯条,通过STM32微控制器的定时器和DMA(直接存储器访问)来实现数据传输。WS2812B是一种常见的RGB LED灯条,每个灯珠可以独立控制红、绿、蓝三种颜色的亮度。以下是这段代码的作用及含义:

代码作用

  1. 定义和初始化:

    • WS2812B_Buf:一个数组,用于存储每个LED的颜色数据,每个LED的颜色由24位组成(8位绿、8位红、8位蓝)。
    • WS2812B_Bit:一个数组,用于存储传输给WS2812B的位数据,包含所有LED的24位数据和一个复位信号位。总长度为 24*WS2812B_LED_QUANTITY + 1
    • WS2812B_Flag:一个标志位,用于指示数据更新完成。

http://www.ppmy.cn/devtools/107648.html

相关文章

BUUCTF—[网鼎杯 2020 朱雀组]phpweb

题解 打开题目是这样子的。 啥也不管抓个包看看&#xff0c;从它返回的信息判断出func后面的是要调用的函数&#xff0c;p后面的是要执行的内容。 那我们直接执行个系统命令看看&#xff0c;可以看到返回了hack&#xff0c;估计是做了过滤。 funcsystem&pls 直接读取源码…

VSCOD常用扩展库

以下是一些常用的 Visual Studio Code 扩展库。 ESLint&#xff1a;用于 JavaScript 和 TypeScript 的静态代码分析工具&#xff0c;帮助发现和修复代码错误和风格问题。 Prettier&#xff1a;用于自动格式化代码的工具&#xff0c;支持多种编程语言。 GitLens&#xff1a;为…

django外键表查询

Django外键&#xff08;ForeignKey&#xff09;操作以及related_name的作用-CSDN博客 django模型中外键操作_django的model的contain外键-CSDN博客 通过基本表可以查外键表 删基本表可以删外键表

Centos 7.9 安装 FastAdmin

Centos安装脚本(无docker版本)(小皮面板) yum install -y wget && wget -O install.sh https://notdocker.xp.cn/install.sh && sh install.sh 参考&#xff1a; https://bbs.huaweicloud.com/blogs/332760 FastAdmin https://www.fastadmin.net/download.html…

类型 编程语言

探究技术的本质&#xff0c;追寻技术的乐趣&#xff01;如题&#xff0c;今天我们来聊聊类型&#xff0c;这里的类型需要限定范围&#xff0c;特指编程语言中的类型。如果要给众多编程语言按照类型来分类的话&#xff0c;可以分为两类&#xff0c;一类是静态类型的语言&#xf…

springweb获取请求数据、spring中拦截器

SpringWeb获取请求数据 springWeb支持多种类型的请求参数进行封装 1、使用HttpServletRequest对象接收 PostMapping(path "/login")//post请求//spring自动注入public String login(HttpServletRequest request){ System.out.println(request.getParameter("…

如何在Mac电脑上本地部署Stable Diffusion:详细教程(webUI)

Stable Diffusion是一款强大的AI生成图像模型&#xff0c;它可以基于文本描述生成高质量的图像。对于想要在本地运行此模型的用户来说&#xff0c;使用Mac电脑部署Stable Diffusion是一个非常吸引人的选择&#xff0c;特别是对于M1或M2芯片的用户。本文将详细介绍如何在Mac上本…

开源模型应用落地-qwen2-7b-instruct-LoRA微调-ms-swift-单机多卡-RTX 4090双卡(十四)

一、前言 本篇文章将使用ms-swift去高效微调QWen2系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用于微调大型语言模型 (LLM)。 是一种有效的自适应策略…