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

STM32G0 定时器PWM DMA输出驱动WS2812配置 LL库

通过DMA方式输出PWM模拟LED数据信号

优点:不消耗CPU资源
缺点:占用内存较大

STM32CUBEMX配置

定时器配置

定时器通道:TIM3 CH2
分频:0
重装值:79,芯片主频64Mhz,因此PWM输出频率:64Mhz/79 ≈ 800Khz,满足芯片要求。
auto-reload preload 要关闭
output compare preload 要打开
在这里插入图片描述

DMA配置

外设一定要选择TIM3_UP,不要选TIM_CHx
方向是内存到外设,和ADC是反的
模式选择Circular,也可以选择Normal,每次要写的时候才发送,这里为了方便选Circular。
重要:数据宽度,外设选择half word,内存选择byte,可以省空间
在这里插入图片描述

添加初始化代码

void Activate_TIM3_DMA(void)
{/* Set DMA transfer addresses of source and destination */LL_DMA_ConfigAddresses(DMA1,LL_DMA_CHANNEL_1,			//DMA通道,需与cubeMX设置的一致(uint32_t)&LED_LEVEL_buff,  //DMA要传输的数组(uint32_t)&TIM3->CCR2,		//DMA传输的寄存器地址,TIM3_CH2LL_DMA_DIRECTION_MEMORY_TO_PERIPH);		//传输方向/* Set DMA transfer size */LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_1,384);	//DMA传输长度,根据灯的数量定,384=16*24/* 开启定时器和DMA */LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_1);LL_TIM_CC_EnableChannel(TIM3, LL_TIM_CHANNEL_CH2);LL_TIM_EnableAllOutputs(TIM3);LL_TIM_EnableCounter(TIM3);LL_TIM_EnableDMAReq_UPDATE(TIM3);
}

添加LED电平代码

#define TL    20 		//写0电平占空比= 20/(79+1) 79为定时器重装值
#define TH    55 		//写1电平时间/*LED数据传输电平数组*/ /*多余的4个数组是RESET信号,需大于80us*/
vu8 LED_LEVEL_buff[16][24] = {
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led0*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led1*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led2*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led3*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led4*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led5*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led6*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led7*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led8*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led9*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led10*/
TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,   TL, TL, TL, TL, TL, TL, TL, TL,/*led11*/
0};

这里一共12个灯,每个灯需24bit,定义16组数据是因为WS2812发送完所有数据后需要80us的低电平信号,剩下4组数据为80us的低电平信号。
已知每个信号宽度为1.25us,算下来为800Khz,这个非常重要,因此TIM重装值必须为79。
计算0码的长度,也就是占空比,占空比= 20/(79+1),时间大概为0.31us,满足需求
计算1码的长度,也就是占空比,占空比= 55/(79+1),时间大概为0.86us,满足需求
在这里插入图片描述
在这里插入图片描述
当要更改灯光颜色的时候,修改LED_LEVEL_buff就行了,效率很高,缺点是需要占用较大的内存空间,由于CPU主频很低,重装值不会超过79,因此数组用8位就够了,32位纯属浪费空间,所以DMA内存长度一定要和数组匹配,否则会出现波形混乱。

相关文章:

STM32G0 定时器PWM DMA输出驱动WS2812配置 LL库

通过DMA方式输出PWM模拟LED数据信号 优点:不消耗CPU资源 缺点:占用内存较大 STM32CUBEMX配置 定时器配置 定时器通道:TIM3 CH2 分频:0 重装值:79,芯片主频64Mhz,因此PWM输出频率&#xff1a…...

记录错误:Access denied for user ‘root‘@‘localhost‘ (using password:No) 解决方案

他说我没输入密码,但是我输入了啊??于是,我试了试这儿,password 一改就好了。。。 他原来是是我打的很快,快速生成的。。。。...

python爬虫实战(5)--获取小破站热榜

1. 分析地址 打开小破站热榜首页,查看响应找到如下接口地址 2. 编码 定义请求头 拿到标头 复制粘贴,处理成json 处理请求头代码如下: def format_headers_to_json():f open("data.txt", "r", encoding"utf-8") # 读…...

单目标应用:基于麻雀搜索算法SSA的微电网优化调度MATLAB

一、微网系统运行优化模型 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、麻雀搜索算法简介 麻雀搜索算法 (Sparrow Search Algorithm, SSA) 是一种新型的群智能优化算法,于2020…...

C# easymodbus

库介绍 EasyModbus是用于 .NET 和 Java 平台上的Modbus TCP/UDP/RTU通讯协议库,支持多种编程语言,如C#、VB.NET、Java、C 与更多C#的变体,如Unity、Mono、.NET Core等等。 EasyModbus的Java版本至少需要Java 7,而C#版本兼容 .NE…...

HikariCP源码修改,使其连接池支持Kerberos认证

HikariCP-4.0.3 修改HikariCP源码,使其连接池支持Kerberos认证 修改后的Hikari源码地址:https://github.com/Raray-chuan/HikariCP-4.0.3 Springboot使用hikari连接池并进行Kerberos认证访问Impala的demo地址:https://github.com/Raray-chuan/springboot-kerberos-hikari-im…...

5分钟看明白rust mod use

rust把mod简单的事没说清,一片混乱,似懂非懂. mod语句查找只有一条规则:先找mod名1.rs,没有就我同名文件夹下的mod名1.rs,如果没有,就同名文件夹下的mod名1/mod.rs,再没有就error. 在mod.rs中,pub mod 文件…...

【Java核心知识】ThreadLocal相关知识

ThreadLocal 什么是ThreadLocal ThreadLoacal类可以为每个线程保存一份独有的变量,该变量对于每个线程都是独占的。实现原理为每个Thread类中包含一个ThreadHashMap,key为变量的对应的ThreadLocal对象,value为变量的值。 在日常使用中&…...

《Python基础教程(第三版)》阅读笔记 1

目录 1 快速上手:基础知识2 列表和元组3 字符串4 字典5 条件、循环及其他6 抽象7 再谈抽象8 异常9 魔法方法、特性和迭代器10 开箱即用 本文参考自《Beginning Python: from novice to professional》,中文版为《Python基础教程(第三版&#…...

坦克400 Hi4-T预售价28.5万元起,越野新能源好理解

8月25日,在以“智享蓉城,驭见未来”为主题的成都国际车展上,坦克品牌越野新能源再启新程,首次以全Hi4-T新能源阵容亮相展台,释放坦克品牌加速布局越野新能源的强烈信号。 Hi4-T架构首款落地车型坦克500 Hi4-T上市至今斩…...

我的Vim学习笔记(不定期更新)

2023年9月3日,周日上午 学到了啥就写啥,不定期更新 目录 字体 文件 标签页 分屏 调用系统命令 字体 设置字体大小 :set guifont字体:h字体大小 例如,:set guifontMonospace:h20 查询当前使用的字体和字体大小 :set guifont? 查看…...

spring boot项目生成容器并运行

一个安静的周末,shigen又睡懒觉了,上次说的拖延症的惩罚来了:早晚各100个健腹轮练习,早上的已经完成了。今天的文章来的有点晚,但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…...

Vue之html中特殊符号的展示

Vue之html中特殊符号的展示 在html中使用特殊字符时直接展示会报错&#xff0c;需要使用实体名称或者实体编号才能展示。 最常用的字符实体 显示结果 描述 实体名称 实体编号空格 < 小于号 < &…...

数据结构1 -- leetcode练习

三. 练习 3.1 时间复杂度 用函数 f ( n ) f(n) f(n) 表示算法效率与数据规模的关系&#xff0c;假设每次解决问题需要 1 微秒&#xff08; 1 0 − 6 10^{-6} 10−6 秒&#xff09;&#xff0c;进行估算&#xff1a; 如果 f ( n ) n 2 f(n) n^2 f(n)n2 那么 1 秒能解决多…...

Java设计模式:四、行为型模式-05:备忘录模式

文章目录 一、定义&#xff1a;备忘录模式二、模拟场景&#xff1a;备忘录模式三、改善代码&#xff1a;备忘录模式3.1 工程结构3.2 备忘录模式模型结构图3.3 备忘录模式定义3.3.1 配置信息类3.3.2 备忘录类3.3.3 记录者类3.3.4 管理员类 3.4 单元测试 四、总结&#xff1a;备忘…...

MongoDB实验——MongoDB配置用户的访问控制

MongoDB 配置用户的访问控制 一、 实验原理 理解admin数据库&#xff1a;安装MongoDB时&#xff0c;会自动创建admin数据库&#xff0c;这是一个特殊数据库&#xff0c;提供了普通数据库没有的功能&#xff0c;例如&#xff0c;有些账户角色赋予用户操作多个数据库的权限&…...

golang逃逸技术分析

“ 申请到栈内存好处&#xff1a;函数返回直接释放&#xff0c;不会引起垃圾回收&#xff0c;对性能没有影响。 申请到堆上面的内存才会引起垃圾回收。 func F() { a : make([]int, 0, 20) b : make([]int, 0, 20000) l : 20 c : make([]int, 0, l)} “ a和b代码一样&#xff0…...

说说你了解的 Nginx

分析&回答 nginx性能数据 高并发连接: 官方称单节点支持5万并发连接数&#xff0c;实际生产环境能够承受2-3万并发。内存消耗少: 在3万并发连接下&#xff0c;开启10个nginx进程仅消耗150M内存 (15M10150M) 1. 正向、反向代理 所谓“代理”&#xff0c;是指在内网边缘 …...

SpringWeb(SpringMVC)

目录 SpringWeb介绍 搭建 SpringWeb SpringWeb介绍 Spring Web是一个基于 Servlet API 构建的原始 web 框架&#xff0c;用于构建基于MVC模式的Web应用程序。在 web 层框架历经 Strust1&#xff0c;WebWork&#xff0c;Strust2 等诸多产品的历代更选 之后&#xff0c;目前业界普…...

Mysql 语句

数据库管理 SQL语言分类 DDL 数据定义语言&#xff0c;用于创建数据库对象&#xff0c;如库、表、索引等 create 创建 create database/table; 数据库/表 create table 表名 &#xff08;括号内添加类型和字段&#xff09;;drop 删除 drop database/table; 数据库/表…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...