注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
hehung的个人空间 http://home.eeworld.com.cn/space-uid-782751.html [收藏] [复制] [分享] [RSS]
日志

【平头哥RVB2601创意应用开发】1. 试试控制板载RGB

已有 304 次阅读2022-3-5 21:53 |个人分类:RVB2601

前言

本文尝试了RVB2601RGB彩灯。

因为RGB的操作官方已经做了,本文将在官方的例程上进行二次开发,以及对源码的解析。

加载工程

  1. 打开CDK,如果不在welcome界面,点击左上角的home按钮回到welcome界面;

[attachimg]591391[/attachimg]
 

  1. 在首页,点击新建工程按钮,搜索ch2601_marquee,搜索到ch2601_marquee_demo工程;

[attachimg]591392[/attachimg] 

  1. 点击创建工程按钮,输入名字,我取名为RGB_Test,然后点击下载方案,等待下载完成;

 

 

代码分析

例程加载好了之后在左边的工程文件夹中,主要操作逻辑在app下面,这下面的文件都是用户自己创建的,其他目录下的文件都是系统文件;

我们需要关注的文件是led.cmain.cinit文件夹以及lvgl_porting文件夹是对初始化以及OLED的操作,我们现在无需关心;

看代码先从main函数入手,main函数代码如下。

 

  1. board_yoc_init是初始化函数;aos_task_newOS任务创建函数,创建了一个demo_task任务来操作RGB输出。
  2. board_yoc_init是板载资源的初始化,包括了串口,OS等,这块我们暂时不用关心,主要任务是看看如何初始化GPIO
  3. 找到任务函数demo_task,如下图,前三个函数lv_init();oled_init();lable_test();的调用都是关于OLED的,初始化OLED,并且显示一个label,我们重点看函数led_pinmux_init();

 

  1. 找到函数led_pinmux_init(),在代码中,led_pinmux_init()在两个地方都有,一个是main.c函数里面,是包含在如果宏定义CONFIG_GPIO_MODE里面的,表示使用普通GPIO控制RGB,另一个在led.c里面,包含在如果宏定义CONFIG_PWM_MODE里面的,表示使用PWM控制RGBCONFIG_GPIO_MODECONFIG_PWM_MODE的宏在app_config.h里面,默认使用的是宏定义CONFIG_PWM_MODE,也就是PWM方式。我们也主要按照PWM方式分析,我们可以看到,这里初始化了三个引脚,并且都初始化为PWM

三个引脚分别为PA7,PA25,PA4.

 

  1. 看原理图,我们可以看到如下图,RGB三个LED通过跳线帽连接到了PA7,PA25,PA4.

对应关系:

蓝色 -- PA4 -- PWM4

绿色 -- PA25 -- PWM2

红色 -- PA7 -- PWM7

 

 

 

  1. 关于PWM的操作详见YOC教程:javascript:;

该文档教程详细描述了如何使用Yoc平台的接口。

  1. 回到demo_task函数,在while循环中led_refresh()就是控制函数,通过分析我们可以知道,g_ctr首先会加到1,所以先是绿灯亮后灭,然后是蓝灯亮后灭,最后是红灯亮后灭,之后交替亮灭,交替时间是1000*1000us,也就是1s。
  2. 关于GPIO的操作可以参考:javascript:;

 

结果验证

分析完代码,我们直接编译下载验证。最后可以看到,和我们分析结果一致,后边可以自己修改代码,控制RGB按照我们自己的逻辑运行。

 

下载了软件之后,发现先是白光一闪,然后绿色LED亮,接着绿LED灭,然后蓝色LED亮,接着蓝色LED灭,最后都不亮,交替时间为1s,循环往复。

 

为什么红色LED不亮呢?经过长时间问题查找,发现是硬件跳线帽没有连接,PA7的跳线帽需要连接上,我这里用的是一根杜邦线连接的,然后三个LED均可以正常工作了。

 

关于使用GPIO的操作逻辑,可以将app_config中的//#define CONFIG_GPIO_MODE打开,#define CONFIG_PWM_MODE注释掉即可。

 

 

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章