【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 三段式 一、两个状态机模型 二、状态机设计(四…

学习java第九十天

​ Spring 框架有什么优势? 轻量级: 在尺寸和透明度方面Spring 是轻量级的。spring框架的基础版本只有大约 2MB 大小。 控制反转 (IOC):通过控制反转技术 ,Spring实现了松耦合。对象间只是给出了依赖性,而不是创建或寻找依赖对象。 面向切面 (AOP): …

在Linux/Ubuntu/Debian中使用lscpu命令查看CPU信息

lscpu 是一个用于显示 CPU 架构信息的命令 lscpu 是一个用于显示 CPU 架构信息的命令。它从 /proc/cpuinfo 文件中读取数据,并以易于理解的方式呈现。使用该命令可以快速获取 CPU 的详细信息,如处理器型号、核心数量、线程数等。 常见用法:…

Linux的shell脚本中的比大小

如果要将 -le 换成相反的(即“大于”),你应该使用 -gt(greater than)。 所以,-le 的相反比较是 -gt。 但如果你想要一个包含“大于”和“不等于”的比较(即“大于”),那…

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

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

vscode导入自定义模块报错ModuleNotFoundError解决方案

问题描述 我的项目为great_gas_or_agents,目录结构如下: log_data_extract main.py math_algorithm 现在我运行main.py,报错:from math_algorithm.utils import parse_month_match_request,ModuleNotFoundError: No …

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

测试类当中 怎么做接口自动化,返回值校验,就是需要返回值的预期值和实际值进行对比 实际值如下 怎么拿到预期值$.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;用于事…

【CSS】aspect-ratio属性详解

目录 基本语法示例讲解保持图片的宽高比使用 aspect-ratio 创建响应式嵌入视频正方形元素 与其他属性的结合 aspect-ratio 属性是 CSS 中的一个有用属性&#xff0c;它允许你轻松地设置元素的宽高比。这个属性可以确保元素在不同屏幕尺寸和容器大小下保持一定的宽高比&#xff…

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

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

什么情况下需要用到动态IP

有许多方法和工具来实现包括主机名、DNS 服务器、IP地址、 网络掩码等。可以重置一个或多个IP地址。“释放”或“更新”按钮分别释放或更新一个IP地址。如果希望释放或更新所有IP 地址&#xff0c;请单击“全部释放”或“全部更新”。其他工动态IP地址的捕捉&#xff0c; Windo…

双指针解题

验证回文数&#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位二进制数…

PDA怎么编程:深度探索PDA编程的四大领域、五大步骤、六大技巧与七大注意事项

PDA怎么编程&#xff1a;深度探索PDA编程的四大领域、五大步骤、六大技巧与七大注意事项 在数字化时代&#xff0c;PDA&#xff08;个人数字助理&#xff09;作为一种便携式的智能设备&#xff0c;其编程能力日益受到关注。然而&#xff0c;对于许多初学者来说&#xff0c;PDA…

【leetcode--最后一个单词的长度】

给你一个字符串s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开&#xff0c;返回字符串中最后一个单词的长度。 第一次解法&#xff1a; class Solution:def lengthOfLastWord(self, s: str) -> int:n len(s)j 0for i in range(n-1, -1, -1):if s[i]…

centos 环境 nginx 安装及常用命令简介

一、引言 Nginx 是一个高性能的HTTP和反向代理服务器&#xff0c;因其卓越的性能、丰富的功能集、简单的配置和低资源消耗而广受欢迎。本文将详细介绍如何在CentOS系统中安装Nginx&#xff0c;并简要介绍一些常用的Nginx命令。 二、在CentOS中安装Nginx 1.先检查服务器 GCC …