【平头哥RVB2601创意应用开发】2. 试试控制板载RGB
[复制链接]
本帖最后由 hehung 于 2022-3-5 21:58 编辑
前言
本文尝试了RVB2601的RGB彩灯。
因为RGB的操作官方已经做了,本文将在官方的例程上进行二次开发,以及对源码的解析。
加载工程
- 打开CDK,如果不在welcome界面,点击左上角的home按钮回到welcome界面;
- 在首页,点击新建工程按钮,搜索ch2601_marquee,搜索到ch2601_marquee_demo工程;
- 点击创建工程按钮,输入名字,我取名为RGB_Test,然后点击下载方案,等待下载完成。
代码分析
例程加载好了之后在左边的工程文件夹中,主要操作逻辑在app下面,这下面的文件都是用户自己创建的,其他目录下的文件都是系统文件;
我们需要关注的文件是led.c和main.c,init文件夹以及lvgl_porting文件夹是对初始化以及OLED的操作,我们现在无需关心;
看代码先从main函数入手,main函数代码如下。
- board_yoc_init是初始化函数;aos_task_new是OS任务创建函数,创建了一个demo_task任务来操作RGB输出。
- board_yoc_init是板载资源的初始化,包括了串口,OS等,这块我们暂时不用关心,主要任务是看看如何初始化GPIO。
- 找到任务函数demo_task,如下图,前三个函数lv_init();oled_init();lable_test();的调用都是关于OLED的,初始化OLED,并且显示一个label,我们重点看函数led_pinmux_init()
- 找到函数led_pinmux_init(),在代码中,led_pinmux_init()在两个地方都有,一个是main.c函数里面,是包含在如果宏定义CONFIG_GPIO_MODE里面的,表示使用普通GPIO控制RGB,另一个在led.c里面,包含在如果宏定义CONFIG_PWM_MODE里面的,表示使用PWM控制RGB。CONFIG_GPIO_MODE和CONFIG_PWM_MODE的宏在app_config.h里面,默认使用的是宏定义CONFIG_PWM_MODE,也就是PWM方式。我们也主要按照PWM方式分析,我们可以看到,这里初始化了三个引脚,并且都初始化为PWM。
三个引脚分别为PA7,PA25,PA4.
- 看原理图,我们可以看到如下图,RGB三个LED通过跳线帽连接到了PA7,PA25,PA4.
对应关系:
蓝色 -- PA4 -- PWM4
绿色 -- PA25 -- PWM2
红色 -- PA7 -- PWM7
- 关于PWM的操作详见YOC教程:https://yoc.docs.t-head.cn/yocbook/Chapter3-AliOS/CSI%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E6%8E%A5%E5%8F%A3/CSI2/PWM.html
该文档教程详细描述了如何使用Yoc平台的接口。
- 回到demo_task函数,在while循环中led_refresh()就是控制函数,通过分析我们可以知道,g_ctr首先会加到1,所以先是绿灯亮后灭,然后是蓝灯亮后灭,最后是红灯亮后灭,之后交替亮灭,交替时间是1000*1000us,也就是1s。
- 关于GPIO的操作可以参考:https://yoc.docs.t-head.cn/yocbook/Chapter3-AliOS/CSI%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E6%8E%A5%E5%8F%A3/CSI2/GPIO.html
结果验证
分析完代码,我们直接编译下载验证。最后可以看到,和我们分析结果一致,后边可以自己修改代码,控制RGB按照我们自己的逻辑运行。
下载了软件之后,发现先是白光一闪,然后绿色LED亮,接着绿LED灭,然后蓝色LED亮,接着蓝色LED灭,最后都不亮,交替时间为1s,循环往复。
为什么红色LED不亮呢?经过长时间问题查找,发现是硬件跳线帽没有连接,PA7的跳线帽需要连接上,我这里用的是一根杜邦线连接的,然后三个LED均可以正常工作了。
关于使用GPIO的操作逻辑,可以将app_config中的//#define CONFIG_GPIO_MODE打开,#define CONFIG_PWM_MODE注释掉即可。
|