目录

  • 1.配置PWM+DMA
  • 2.占空比设置


由上图可知 T0H+T0LT1H+T1L 的时间周期为 800ns ~ 1380ns
取一个中间值 1.25us
那么0码/1码的周期就是 1s / 1.25us = 800kHz
所以PWM的周期就是800KHz

1.配置PWM+DMA


我这里使用的是TIM2_CH1 总线上的时钟频率为 52M
52M / 800KHz = 65
分频系数为0
那么向上计数值为65-1

2.占空比设置


0码的高电平大概占1/3的时间,那么PWM的计数值为 65 * 1/3 = 22

1码的高电平大概占2/3的时间,那么PWM的计数值为65 * 2/3 = 43


上面理论的东西弄好了,接下来是怎么使用
如果你以前只是使用PWM来调节呼吸灯,那你可能很难理解
例如我想输出 8个码 0 0 1 0 1 0 1 1
这里需要解决两个问题,怎么控制
1.输出一个0后,如何快速输出一个1?
2.怎么精准控制输出8个脉冲后就停止了?

运用你以前的PWM的使用方法是无法做到上面这两点的,但是和DMA组合使用,就可以很方便地实现(一行代码就搞定)

#define NUM 9
uint16_t send_Buf[NUM] = {22, 22, 43, 22, 43, 22, 43, 43, 0};void led_on(void)
{send_Buf[NUM - 1] = 0; // 这个很重要,最后一个需要设为0,要不然DMA不会停下来HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t *)send_Buf, NUM);
}

一个函数,简简单单就实现了上面的功能,示波器采集到的数据也对应得上


/*** @brief        :输入hsv 返回rgb值 转换函数* @param         {uint32_t} h:色调(0~360°)* @param         {uint32_t} s:饱和度(0~100%)* @param         {uint32_t} v:亮度(0~100%)* @param         {uint32_t} *r:* @param         {uint32_t} *g:* @param         {uint32_t} *b:* @return        {*}**/
void led_strip_hsv2rgb(uint32_t h, uint32_t s, uint32_t v, uint32_t *r, uint32_t *g, uint32_t *b)
{h %= 360; // h -> [0,360]uint32_t rgb_max = v * 2.55f;uint32_t rgb_min = rgb_max * (100 - s) / 100.0f;uint32_t i = h / 60;uint32_t diff = h % 60;// RGB adjustment amount by hueuint32_t rgb_adj = (rgb_max - rgb_min) * diff / 60;switch (i){case 0:*r = rgb_max;*g = rgb_min + rgb_adj;*b = rgb_min;break;case 1:*r = rgb_max - rgb_adj;*g = rgb_max;*b = rgb_min;break;case 2:*r = rgb_min;*g = rgb_max;*b = rgb_min + rgb_adj;break;case 3:*r = rgb_min;*g = rgb_max - rgb_adj;*b = rgb_max;break;case 4:*r = rgb_min + rgb_adj;*g = rgb_min;*b = rgb_max;break;default:*r = rgb_max;*g = rgb_min;*b = rgb_max - rgb_adj;break;}
}

后续把WS2812B的驱动代码补上(如果我还记得的话。。。)

STM32 HAL WS2812B PWM+DMA控制相关推荐

  1. STM32 HAL库 PWM+DMA 驱动WS2812B彩灯(STM32F030F4P6)

    谁不想拥有炫酷的小彩灯呢?WS2812B可以给你机会...... 博主使用STM32驱动WS2812B主要参考了这位佬的文章,因为需求问题,采用了Cortex-M0的stm32f030f4p6(16k ...

  2. 关于STM32利用TIM+PWM+DMA控制WS2812

    开发环境 MCU:STM32F103c8t6 开发工具:STM32CubeMX 使用板子参考原理图:STM32F103C8T6最小系统板开源链接 PWM 脉宽调制(PWM)基本原理:控制方式就是对逆变 ...

  3. STM32F427库函数PWM+DMA控制ws2812b灯带

    STM32F427IIHx库函数PWM+DMA控制ws2812b灯带 一.参考资料 查看ws2812b用户手册可知: 二.代码部分 添加文件ws2812b.c,ws2812b.h 配置的F427IIH ...

  4. STM32 HAL库 串口DMA接收不定长数据

    STM32 HAL库 串口DMA接收不定长数据 整体思路:我是用的CUBEMX软件生成的工程,使能了两个串口,串口2用来接收不定长的数据,串口1用来发送串口2接收到的数据:串口2我找了一个UBLOX卫 ...

  5. STM32:利用PWM波控制飞盈电调过程和注意事项

    STM32:利用PWM波控制电调过程和注意事项 在进行模型控制的过程中,如四旋翼无人机等,需要用到电机,这些电机需要通过电调来控制电机的转速.在电调模块中带有的说明书一般都是利用遥控器进行控制,有些情 ...

  6. STM32 HAL 硬件IIC+DMA+简单图形库控制OLED

    目录 前言 一.建立工程 二.编写和移植 前期准备 驱动部分修改 三.使用和验证 结论 (2022年1月22日重制)本文主要是移植带简单图形库的程序,如果只是实现DMA控制,建议看[0.96寸 OLE ...

  7. 国民技术 N32G031F8S7 PWM+DMA 控制 WS2812

    一.技术背景 之前移植使用STM32来做MCU,但是这两年STM32离谱的价格和供货情况直接劝退大部分互联网企业.国产的MCU厂家也抓住机会,迅猛抢占市场,国民技术是较为典型的一个厂家. 在很多时候, ...

  8. STM32 HAL库 串口DMA(收发)和STM32串口中断接收(接收时间管理机制)+ESP8266 wifi模组通信问题

    一.HAL库 串口 DMA+ESP8266模组通信问题 用STM32 HAL库串口的DMA发送和空闲中断接收处理数据,单片机发送AT指令给ESP8266 wifi模组问题:单片机连续几次给wifi模组 ...

  9. STM32 HAL库ADC+DMA(非定时器)代码和遇到的问题

    目录 一.整体说明 二.部分知识点预览 三.代码部分 四.遇到的问题及现象 (1)仿真进入错误 (2)非连续模式软件触发时adcbuf里面的数据不对 (3)HAL库的ADC DMA相关中断的嵌套实现 ...

最新文章

  1. 零基础的前端开发初学者应如何系统地学习?
  2. 《转》java URL重写
  3. python 实现redis订阅发布功能
  4. 漫画 | 你真的会用烙铁焊接吗?
  5. 有哪些网站社区可以看原创平面设计大师作品?
  6. 机器人瓦力机械舞_25个与机器人有关的“前卫”知识,你知道几个?
  7. 拥抱开源四年的 .NET,现在怎么样了?
  8. Python编码风格
  9. windows取证之镜像取证仿真步骤
  10. GoF 23种设计模式
  11. 电子DIY:用单片机设计一款USB游戏手柄
  12. 加班申请 ----中间表--系统自动算出---可调休天数
  13. 年老时最后悔但为时已晚的几件事
  14. Windows常见的几种提权方法
  15. 计算机体系结构的主要原理,《计算机组成原理》计算机体系结构.pdf
  16. NodeMCU 通过MQTT 连接阿里云物联网
  17. 模拟QQ聊天——采用TCP协议的C/S架构实现
  18. iptables扩展模块
  19. sc4020使用并挂载到vcenter 2019.7.10
  20. PC微信逆向:发送与接收消息的分析与代码实现

热门文章

  1. 脉冲星 6 月脉动 | Pulsar Summit 北美峰会圆满结束,ApacheCon 议程官宣
  2. c语言打印一个字母圣诞树,C语言打印圣诞树
  3. 测试功能点----方法
  4. 前端参数无法转为后端实体内部类_javaweb实现自动将前端的属性值(HttpServletRequest)转化为后台对应的实体类...
  5. 学校计算机社团目标,电脑社团活动计划
  6. 微信公众号点击菜单出现白屏问题探究
  7. oem是代工还是贴牌_OEM贴牌和ODM贴牌的区别
  8. 最优策略(Optimal Policy)及贝尔曼最优方程(Bellman Optimally Equation)
  9. 2.系统发生树构建(非加权分组平均法、邻接法python实现)
  10. 自然语言处理之神经网络基础