0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

聚沃科技 2024-06-04 09:49 次阅读
wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

8.1实验内容

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

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

8.2实验原理

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

8.3硬件设计

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

wKgZomZecTqAZswtAAB-SATX3dA018.png

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.2RGB灯珠初始化函数解析

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输出时间。

C TIMER_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彩灯呼吸的效果

教程GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6030

    文章

    44505

    浏览量

    632361
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16943

    浏览量

    350085
  • 开发板
    +关注

    关注

    25

    文章

    4920

    浏览量

    97114
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24140
  • rgb灯
    +关注

    关注

    0

    文章

    9

    浏览量

    1892
收藏 人收藏

    评论

    相关推荐

    STM32CUBEMX开发GD32F303(6)----GPIO输入函数说明

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证。
    的头像 发表于 11-25 16:06 1527次阅读
    STM32CUBEMX<b class='flag-5'>开发</b><b class='flag-5'>GD32F303</b>(6)----GPIO输入函数说明

    STM32CUBEMX开发GD32F303(8)----USART收发配置

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证。
    的头像 发表于 11-29 10:40 3088次阅读
    STM32CUBEMX<b class='flag-5'>开发</b><b class='flag-5'>GD32F303</b>(8)----USART收发配置

    GD32F303】星空介绍

    一、开发板介绍星空GD开发板是由旗点科技推出的一款GD32开发板,板载
    发表于 09-11 17:55

    【星空GD32F303开发板试用体验】开发记录汇总

    本帖最后由 申小林一号 于 2021-10-15 14:47 编辑 开贴日期:2021年10月11日该贴主要是用于记录星空开发板使用记录以及学习GD32F303芯片的一个过程,将所有的
    发表于 10-11 16:09

    【星空GD32F303开发板试用体验】开箱+环境搭建

    本帖最后由 lustao 于 2021-10-19 09:29 编辑 感谢 发烧友学院以及广州旗点智能科技有限公司为我和孩子提供此产品星空GD32F303开发板。收到了星空
    发表于 10-18 14:15

    【星空GD32F303开发板试用体验】开箱+环境搭建

    https://bbs.elecfans.com/jishu_2179209_1_1.html感谢 发烧友学院以及广州旗点智能科技有限公司为我和孩子提供此产品星空gd32F303开发板。收到了星空
    发表于 11-02 15:36

    【星空GD32F303开发板试用体验】+板卡概览

    本帖最后由 cooldog123pp 于 2021-11-6 21:07 编辑 星空GD开发板是由旗点科技推出的一款GD32开发板
    发表于 11-06 21:05

    星空GD32F303开发板的相关资料下载

    一、开发板介绍星空GD开发板是由旗点科技推出的一款GD32开发板,板载
    发表于 12-10 08:27

    模拟电路网络课件 第八节:半导体BJT

    模拟电路网络课件 第八节:半导体BJT 3.1  半导体BJT
    发表于 09-17 09:31 2736次阅读

    STM32CUBEMX开发GD32F303(14)----IIC之配置OLED

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。
    的头像 发表于 07-26 13:52 1898次阅读
    STM32CUBEMX<b class='flag-5'>开发</b><b class='flag-5'>GD32F303</b>(14)----IIC之配置OLED

    GD32F303固件库开发

    的可以加群申请:615061293 。 GD32F303固件库开发(1)----前期准备与烧录 使用GDLINK、jlink、串口下载程序到GD芯片。 [https://blog.csdn.net
    的头像 发表于 07-27 09:27 1099次阅读
    <b class='flag-5'>GD32F303</b>固件库<b class='flag-5'>开发</b>

    GD32F303红枫开发板使用手册】第二讲 GPIO-流水灯实验

    GD32F303系列MCU最多可支持 112 个通用I/O 引脚(GPIO),分别为 PA0 ~ PA15, PB0 ~ PB15, PC0 ~ PC15,PD0 ~ PD15, PE0
    的头像 发表于 05-29 10:02 1470次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第二讲 GPIO-流水灯<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册】第五讲 FMC-片内Flash擦写读实验

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字节空间内, CPU执行指令零等待,具有相同主频下最快的代码执行效率。FMC也
    的头像 发表于 06-02 10:05 681次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第五讲 FMC-片内Flash擦写读<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册】第十六讲 USART-DMA串口收发实验

    在前面ADC章节中,我们介绍了DMA的工作原理,这里就不多做介绍。从GD32F303用户手册中可以查到,各串口的TX和RX分别对应DMA的不同通道,比如USART0的TX对应DMA0的通道3,而RX对应DMA0的通道4。
    的头像 发表于 06-15 09:54 948次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第十六讲 USART-DMA串口收发<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册】第二十讲 SPI-SPI NAND FLASH读写实验

    通过本实验主要学习以下内容: •SPI通信协议,参考19.2.1东方红开发板使用手册GD32F303 SPI操作方式,参考19.2.2东方红
    的头像 发表于 06-20 09:50 768次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第二十讲 SPI-SPI NAND FLASH读写<b class='flag-5'>实验</b>