当前位置: 首页 > news >正文

WS2812B驱动

#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:一个标志位,用于指示数据更新完成。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • 在NAS上打造AI加持的云端个人开发环境
  • 面试官:你有写过自定义指令吗?自定义指令的应用场景有哪些?
  • 代码训练营 Day24 | 93.复原IP地址 |78.子集
  • HTML5好看的花店商城源码1
  • 18054 输出不同的数
  • Llama 3.1大模型的预训练和后训练范式解析
  • 各种各样的正则表达式
  • 筑牢数字防线:深信达MCK与SPN软件的勒索病毒防护策略
  • ansible自动化运维项目
  • 模拟网络丢包常用方法以及工具
  • 充电宝哪个品牌好?盘点最推荐十大耐用充电宝品牌!
  • Chatgpt人工智能对话系统 可进行在线交互和对话 带完整的安装代码包以及搭建部署教程
  • OpenCV结构分析与形状描述符(7)计算轮廓的面积的函数contourArea()的使用
  • [笔记] php常见简单功能及函数
  • 【笔记】你不知道的JS读书笔记——Promise
  • 03Go 类型总结
  • Centos6.8 使用rpm安装mysql5.7
  • Cumulo 的 ClojureScript 模块已经成型
  • emacs初体验
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript的使用你知道几种?(上)
  • JS笔记四:作用域、变量(函数)提升
  • nodejs调试方法
  • orm2 中文文档 3.1 模型属性
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SOFAMosn配置模型
  • SQLServer之创建显式事务
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Terraform入门 - 1. 安装Terraform
  • Vue2.x学习三:事件处理生命周期钩子
  • Windows Containers 大冒险: 容器网络
  • 程序员该如何有效的找工作?
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 解析 Webpack中import、require、按需加载的执行过程
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 正则表达式
  • ​VRRP 虚拟路由冗余协议(华为)
  • #70结构体案例1(导师,学生,成绩)
  • #Spring-boot高级
  • (~_~)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (7)svelte 教程: Props(属性)
  • (二)PySpark3:SparkSQL编程
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (算法)求1到1亿间的质数或素数
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)利用ant在Mac 下自动化打包签名Android程序