利用stm32cubeide实现几个功能:

1.跑马灯

2.单色呼吸灯

ws2812b就不介绍了,不懂得参考这个(39条消息) 初出茅庐的小李第84篇博客之驱动WS2812B灯带(一)_初出茅庐的小李的博客-CSDN博客_ws2812b知道控制原理后,在软件里面配置引脚,我这里用的是PA8。

模式设置推挽输出,速度设置为HIGH,其他得没啥了,生成代码。

要想实现以上三个功能,首先我们得先让ws218b亮起来,根据时序图,编写我们的发送函数。

#define T0H() __NOP();__NOP();__NOP();__NOP();
#define T0L() __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
#define T1H() __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
#define T1L() __NOP();__NOP();__NOP();__NOP();void WS2812_Send(uint8_t data){for(uint8_t i=0;i<8;i++){if(data & 0x80){GPIOA->BSRR = GPIO_PIN_8;T1H();GPIOA->BRR = GPIO_PIN_8;T1L();}else{GPIOA->BSRR = GPIO_PIN_8;T0H();GPIOA->BRR = GPIO_PIN_8;T0L();}data<<=1;}
}

通过该函数可以写入一个颜色的数据,要想使彩灯亮起来,就需要发送三个颜色的数据。当然一般来说不会只有一个ws2812,我这里用到了24个,所以想让他们全部亮起来的话需要发送24次。

现在我们思考一个问题,由于ws2812是串在一起的,想要实现跑马灯的效果,不能对每个灯进行单独控制。

所以我采取的方法是把上一个灯的颜色设置为0,这样子就只有当前要显示的灯才有颜色。废话不多说看程序

void ws218_Clear(uint8_t num){  //清除颜色for(int j=0;j<num;j++){for(int i=0;i<3;i++)WS2812_Send(0x00);}
}void waterfall_light(uint8_t green,uint8_t red,uint8_t blue){  for(int i=0;i<24;i++){      //因为有24个灯所以要发12次for(int j=0;j<i;j++){    //把上一个灯颜色清掉ws218_Clear(1);}WS2812_Send(green);      //发送当前需要亮的灯的颜色WS2812_Send(red);WS2812_Send(blue);HAL_Delay(500);   }ws218_Clear(24);    //把全部颜色都清掉HAL_Delay(1);
}

这样就可以实现跑马灯效果了。

现在我们来实现呼吸灯,实现呼吸灯大部分都是通过pwm来改变输出,实现呼吸的效果,但是由于ws2812的控制方式,使得这种方式对于我们来说不可行,所以经过网上查找资料得知,可以把RGB转换成HSL,通过改变L的大小来实现亮度的变化,在把HSL转换成RGB显示出来。

具体转化代码请参考(39条消息) HSL和RGB的相互转换_qq_1769172560的博客-CSDN博客_hsl转rgb

解决了调节亮度问题这样就可以来编写我们的呼吸灯代码了

double luminance;void breathing_light(uint8_t green,uint8_t red,uint8_t blue){   //呼吸灯 rgb单色的呼吸;RGB2HSL(green,red,blue,&H,&S,&L);   //将rgb转换成HSLluminance=L;      while(luminance>=0){        HSL2RGB(H,S,luminance,&r,&g,&b);  //将hsl转换成rgbfor(int i=0;i<24;i++){WS2812_Send(r);WS2812_Send(g);WS2812_Send(b);}luminance-=0.01;HAL_Delay(12);}luminance=0;while(luminance<L){HSL2RGB(H,S,luminance,&r,&g,&b);for(int i=0;i<24;i++){WS2812_Send(r);WS2812_Send(g);WS2812_Send(b);}luminance+=0.01;HAL_Delay(12);}
}

我们只需要在main函数中调用就可以了。效果这里就不展示了。

STM32控制WS2812B HAL库相关推荐

  1. 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)

    [STM32]CubeMX+HAL库之 硬件IIC+DMA控制1.3寸OLED 前言 目前网上大多数驱动OLED屏都采用软件IIC,因为HAL库的升级使得硬件IIC的稳定性得到了保障,所以想采用硬件I ...

  2. STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例)

    STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例) 目录 STM32CubeMX | STM32 F1系列HAL库低功耗 ...

  3. STM32如何配置HAL库

    STM32如何配置HAL库 前言   相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好.黑猫也好 ...

  4. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)

    [STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...

  5. 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案)

    [STM32笔记]HAL库低功耗模式配置(ADC唤醒无法使用.低功耗模式无法烧录解决方案) [STM32笔记]低功耗模式配置及避坑汇总 一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需 ...

  6. 【STM32】基于HAL库的中断详细学习

    目录 1.中断概述 1.1中断相关概念 1.2 STM32中断系统 2 .HAL库的中断处理 2.1 HAL 库的中断封装 2.2 外部中断处理流程 3.外部中断的HAL库定义 3.1. 外部中断的数 ...

  7. 移植Freemodbus到STM32(基于CubeMX,HAL库)-避坑篇

    具体Freemodbus移植到STM32步骤参考: STMC2CubeMX | STM32 HAL库移植FreeModbus详细步骤 基于STM32HAL库移植FreeModbus FreeModbu ...

  8. stm32——手动移植HAL库以及错误解决方案(以STM32F103ZE为例)

    寄存器编程的缺点:代码可读性差,二次开发难度大,而且要每次都查阅用户手册,非常麻烦 HAL库:HAL库封装出了一层通用性的接口,标准化了一套通用性的接口,大大提高了代码的通用性 stm32CubeMX ...

  9. STM32 使用CubeMX HAL库快速生成USBVCP虚拟串口工程

    一.前言 原来STM32USB开发很复杂,在标准库上移植USB库需要修改不少地方,但是现在用HAL库,配合CubeMX就能快速生成USB工程了,这里用STM32F1来实现Virtual_COM_Por ...

  10. STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)

    参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...

最新文章

  1. Spring Boot 集成 MyBatis 与 c3p0
  2. 是先打工还是直接创业?答案让我惊呆了!
  3. 颈椎前路caspar撑开器_“骨质增生”导致的颈椎病怎么破?
  4. linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx
  5. 周末ROS学习沙龙第四期——动作编程、dynamic_reconfigure动态参数更新、控制机器人移动、传感器数据处理
  6. C++_结构体指针_嵌套结构体_结构体做为函数参数_结构体值传递和指针传递---C++语言工作笔记026
  7. ImageView的属性android:scaleType作用
  8. 打印学生选课清单 (25 分)
  9. linux扫描后台地址,Linux如何查看和控制进程
  10. 【物理应用】基于matlab GUI功率谱估计【含Matlab源码 329期】
  11. 小学生python游戏编程7----角色精灵定义
  12. 探索大神科比,30000多次投篮数据,有好玩的发现
  13. ubuntu 安装openproj-1.4-2.noarch.rpm
  14. 蓝宝石rx470d原版bios_狼神矿卡烤机89°C!强刷蓝宝石RX570超白金显卡BIOS降温75°教程...
  15. 基于stm32单片机的按键智能电子密码锁(源码+仿真+原理图+PCB+参考论文)
  16. “踢爆”职场焦虑、玩机车、文科转大厂程序媛,乘风破浪的 IT 女神太飒了!
  17. 加推科技领读:2019,深圳开荒牛的TO B拓荒路
  18. Python 使用xlsxwriter绘制Excel表格
  19. 算法设计与分析:分治思想 - 入门
  20. 纽约大学工程学院计算机工程硕士,纽约大学New York University (NYU) MS Computer Engineering 计算机工程硕士...

热门文章

  1. 《The Django book 2.0中文译本》PDF
  2. tr069开源代码文档_tr069开源代码——cwmp移植
  3. Electron 使用Widevine CDM插件
  4. 360浏览器通过访问插件管理界面启用flash实例演示,360浏览器启用Adobe Flash Player方法
  5. 最速下降法python_最速下降法python实现
  6. chrome PPAPI 开发(一)
  7. lintcode-微软笔试
  8. 语音信号处理 | 傅里叶变换、短时傅里叶变换、小波变换、希尔伯特变换、希尔伯特黄变换
  9. Mac终端扫描附近wifi信号强度/信道
  10. win7使用命令提示符怎么运行C语言,Win7如何打开命令行窗口?Win7打开命令提示符的多种方法...