【GD32F303红枫派使用手册】第八节 TIMER-RGB彩灯实验

8.1 实验内容

通过本实验主要学习以下内容:

  • RGB彩灯控制原理
  • TIMER PWM输出原理

8.2 实验原理

本例程中使用的RGB彩灯采用共阳极驱动方式,使用三路PWM进行驱动,对应引脚输出低电平的时候对应RGB灯珠点亮,调节不同路的PWM占空比可以实现多种多样的颜色,每个通道可以输出0%-100%的占空比,组合起来可以输出100*100*100种色彩。

8.3 硬件设计

RGB彩灯的硬件控制电路如下,通过TIMER0_CH0/CH1/CH2三个通道控制RGB灯珠。

8.4 代码解析

本例程采用TIMER0的三个通道进行控制RGB灯珠,调整每个通道的占空比实现呼吸灯的效果。

8.4.1 主函数代码解析

主函数代码如下所示,主要包括串口初始化、LED初始化、RGB灯珠初始化、timer驱动初始化(该timer用于调整RGB灯珠PWM驱动时间)。

C
int main(void)
{driver_init(); bsp_uart_init(&BOARD_UART);bsp_led_group_init();  bsp_led_on(&LED0);bsp_led_off(&LED1);bsp_rgb_init(1000000,100);// 1M timer_cnt_ck,10K PWM CK    TIMER_INT.timer_updata_callback=rgb_switch;bsp_timer_init(10000,500);printf("\r\n RGB breathing lamp\r\n");while(1){}
}

8.4.2 RGB灯珠初始化函数解析

RGB灯珠初始化函数如下,在此定义了RGB_TIMER_R、RGB_TIMER_G、RGB_TIMER_B三个灯的控制结构体,并通过timer驱动进行配置。

C
void bsp_rgb_init(uint32_t counter_frequency,uint16_t period)
{driver_timer_multi_channel_init(&RGB_TIMER_R,&RGB_TIMER_G,&RGB_TIMER_B,NULL,counter_frequency,period);driver_timer_pwm_on(&RGB_TIMER_R);driver_timer_pwm_on(&RGB_TIMER_G);driver_timer_pwm_on(&RGB_TIMER_B);    
}
TIMER_CH_DEF(RGB_TIMER_R,TIMER0,0,TIMER_CH_PWM_LOW,A,8,AF_PP,NULL);
TIMER_CH_DEF(RGB_TIMER_G,TIMER0,1,TIMER_CH_PWM_LOW,A,9,AF_PP,NULL);
TIMER_CH_DEF(RGB_TIMER_B,TIMER0,2,TIMER_CH_PWM_LOW,A,10,AF_PP,NULL);

8.4.3 基础定时器初始化及中断处理函数

基础定时器初始化配置代码如下,在此起了一个定时器TIMER5,并使能了其溢出中断。该定时器用于控制RGB PWM输出时间。

CTIMER_INT.timer_updata_callback=rgb_switch;bsp_timer_init(10000,500);void bsp_timer_init(uint32_t counter_frequency,uint16_t period)
{driver_timer_base_int_init(&TIMER_INT,counter_frequency,period);nvic_irq_enable(TIMER5_IRQn,0,0);
}

其中断回调函数如下,通过该函数定时调整RGB三路PWM的占空比,其中,RGB三路起始占空比分别为0、30%、60%,之后没路每次增加1%,进而实现彩灯呼吸的效果。 

C
void rgb_switch(void)
{   static  uint8_t r_duty=0,g_duty=30,b_duty=60;bsp_rgb_duty_set(r_duty++,g_duty++,b_duty++); if(r_duty>=100) r_duty=0; if(g_duty>=100) g_duty=0;if(b_duty>=100) b_duty=0;    
}

8.5 实验结果

将本例程代码下载到红枫派开发板中,运行后将会看到RGB彩灯呼吸的效果

将本例程烧录到红枫派开发板中,运行后将会通过蜂鸣器听到相关音乐

由聚沃科技原创,来源于   【红枫派开发板】第八讲 TIMER-RGB彩灯实验 - 苏州聚沃电子科技有限公司 (gd32bbs.com)

GD32MCU技术交流群:859440462   

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA新起点V1开发板(八-语法篇)——状态机

文章目录 一、两个状态机模型二、状态机设计(四段论)2.1 状态空间定义2.2 状态跳转(时序逻辑)2.3 下个状态判断(组合逻辑)2.4 各个状态下的动作2.5 三段式 一、两个状态机模型 二、状态机设计(四…

用户投诉对旅行社复购率有什么影响?该如何分析投诉数据?

随着在线旅游市场的不断扩大,旅游平台的用户基数和交易量持续增长,用户投诉作为服务质量的反馈机制,其重要性日益凸显。用户投诉不仅反映了旅游服务中存在的问题,也是推动平台中的旅行社改进服务、提升用户体验的重要动力。然而&a…

接口自动化-预期值和实际值怎么写?

测试类当中 怎么做接口自动化,返回值校验,就是需要返回值的预期值和实际值进行对比 实际值如下 怎么拿到预期值$.msg?用正则表达式-提取值 建新的类-来编写用正则表达式拿到预期值 源码pattern 使用的compile的方法,传入的是字符串正则表…

短剧cps系统搭建开发,热门短剧推广分销系统。短剧分销是怎么操作的?

目录 前言: 二、短剧是怎么推广分销的? 二、 短剧分销系统有什么功能? 三、怎么搭建? 总结: 前言: 短剧分销项目目前的现状是多元化且充满活力的。随着短剧市场的快速发展和观众接受度的提高&#xff0…

大功率LED照明芯片OC6781输入5V~36V,PWM升压型LED恒流驱动器

概述 OC6781是一款高效率、高精度的升压型LED恒流驱动控制芯片。OC6781内置高精度误差放大器,振荡器,恒流驱动电路等,特别适合大功率、多个高亮度LED灯串恒流驱动。OC6781采用固定频率的PWM控制方式,工作频率可通过外部电阻进行设…

MySQL的组成与三种log

MySQL由几块组成 连接器分析器优化器执行器 MySQL的三大log blog 作用&#xff1a; 用于主从同步与数据恢复 记录内容&#xff1a; 已经完成的 DML(数据操作语句)&#xff0c;主要是用于数据备份 redolog<重试日志> 作用&#xff1a; 崩溃恢复&#xff0c;用于事…

跟着AI学AI_02, 时域频域和MFCC

AI&#xff1a;ChatGPT4o 时域和频域是信号处理中的两个基本概念&#xff0c;用于描述信号的不同特性。 时域 时域&#xff08;Time Domain&#xff09; 是对信号随时间变化的描述。在时域中&#xff0c;信号是作为时间的函数来表示的。 时域表示&#xff1a;例如&#xff0…

双指针解题

验证回文数&#xff08;验证回文数-CSDN博客&#xff09;和判断在子序列&#xff08;判断子序列-CSDN博客&#xff09;已经在之前进行了计算&#xff0c;今天有三个新的双指针问题&#xff1a; 两数之和II—输入有序数组 给你一个下标从 1 开始的整数数组 numbers &#xff0…

堆的认识和堆的操作

一.堆的认识: ① 也就是说它取出的顺序是需要搜索的,查找特定性质。 ② 数组:总是插入尾部(1),查找(n)移动元素删除特性(n) 链表:头插或尾插(1),查找(n)删特性(1) 所以为什么要调整顺序?就是为了查找特性方便。 有序数组:找到合适位置(n)移动元素插入(n),删除最…

HMM地图匹配算法库Barefoot环境搭建

1.引入gps路径匹配开源项目barefoot 克隆仓库 git clone https://github.com/bmwcarit/barefoot.git打开项目执行mvn命令将项目打包到maven仓库 mvn install -DskipTests在自己的maven项目中引入barefoot依赖 <dependency><groupId>com.bmw-carit</groupId&g…

第五篇 加法器

实验五 加法器 5.1 实验目的 掌握半加器和全加器的基本原理 掌握串行进位加法器的基本原理 掌握使用全加器实现串行进位加法器的基本原理 熟悉Verilog 代码设计 5.2 原理介绍 5.2.1 半加器 半加器和全加器是算数运算电路中的基本单元&#xff0c;它们是完成1位二进制数…

《MySQL索引》学习笔记

《MySQL索引》学习笔记 MySQL的体系结构存储引擎简介InnoDB简介MyISAM简介 索引索引结构BTreeHash索引思考索引分类 索引语法SQL性能分析索引使用最左前缀法则 索引失效的情况范围查询索引列运算字符串不加引号模糊查询or连接的条件数据分布影响 SQL提示覆盖索引前缀索引单列索…

操作系统复习-linux的进程管理

linux的进程管理 linux进程的相关概念 进程的类型 前台进程 前台进程就是具有终端&#xff0c;可以和用户交互的进程&#xff0c;会占用终端shell&#xff0c;不可以输入其他的命令。 后台进程 前台进程就是具有终端&#xff0c;可以和用户交互的进程。 不会占用终端shell&a…

macOS的word没有zotero怎么办

打开zotero,首选项,引用,重新安装加载项 然后到word里 点模板和加载项 把zotero勾上,OK了

Java学习【认识异常】

Java学习【认识异常】 认识异常异常的种类异常的作用 异常的处理方式JVM默认的处理方式捕获异常finally 多个异常的处理异常中的方法抛出异常 自定义异常 认识异常 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常 异常的种类 Error代表的是系统级别的错误&a…

ClickHouse 使用技巧总结

文章目录 数据导入、导出技巧外部文件导入导技巧使用集成表引擎导入、导出数据 建表技巧表引擎选择技巧分区键选择技巧数据结构选择技巧分区技巧 高级技巧物化视图投影位图变更数据捕获 常见报错及处理方法 数据导入、导出技巧 外部文件导入导技巧 ClickHouse作为OLAP即席分析…

每日一题《leetcode--206.反转链表》

https://leetcode.cn/problems/reverse-linked-list/ 这道题可以定义一个新结点newhead&#xff0c;newhead指向NULL。此时遍历所给链表将遍历的每个结点头插到newhead上。 struct ListNode* reverseList(struct ListNode* head) {struct ListNode* curhead;struct ListNode* n…

Go语言垃圾回收(GC原理)

1. GC回收机制 1.1 V1.3标记清除法 (1)概述 1.STW暂停 STW(暂停业务逻辑,找出可达和不可达对象) 2.对可达对象做上标记 标记完成之后,对象5和对象6不可达,被GC清除.之后STW结束. (2).缺点 STW :让程序暂停,程序出现卡顿.标记需要扫描整个heap.清除数据会产生heap碎片. 1.…

YYDS练手 130道python练习题 完整版PDF

近年来&#xff0c;Python在编程语言界里赚足了风头&#xff0c;无论是受欢迎程度&#xff0c;还是薪资待遇&#xff0c;都非常可观&#xff0c;相应的&#xff0c;Python岗位要求也越来越高&#xff0c;无论你是零基础还是老前辈&#xff0c;在Python面试中都不能轻视。 不打…

对比WPF和Avalonia的边框渲染差异

众所周知&#xff0c;诸如Border、Rectangle等元素&#xff0c;是具有边框的。但在WPF和Avalonia中&#xff0c;边框的渲染机制有所不同。 如下代码&#xff0c;Border的边框和背景色均为黑色&#xff0c;并且将透明度设为0.5&#xff1a; <Border Width"100" H…