【RT-Thread】基于AB32VG1开发 点亮RGB全彩LED
- 原理图分析
开发板上板载一个三色 RGB 全彩LED
开发板引脚连接如下图,引脚 PA1(注意手册上写的PA2, 官方例程也是PA2,可以是因为V1.0板是PA2, 我拿到板是V2.0) 对应蓝灯,引脚 PE1 对应红灯,引脚 PE4 对应绿灯,RGB 为共阳极,当引脚拉低时,对应的 led 点亮
详情参阅:中科蓝讯AB32VG1开发板介绍电路原理图分析接口说明 ... - 创建RTT代码工程
按上节方法创建工程AB32VG1_RGB
详情参阅: 基于RT-Thread的AB32VG1开发环境搭建 - 配置工程
打开工程RT-Thread Setting
设置要加载驱动Pin(默认是打开的如果要加载其他驱动须勾选上)
关闭RT-Thread Setting,配置好的驱动或软件包会自动添加到工程,添加过程要等待片刻
然后,更新软件包 - 编辑源码
新建源码文件:rgb_led.c, 编辑
- /*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2021-10-01 LOJAM the first version
- */
- //#include "rgb.h"
- #include <rtthread.h>
- #include "board.h"
- // 定义一个 RGB 结构体
- typedef struct
- {
- uint8_t LED_R;
- uint8_t LED_B;
- uint8_t LED_G;
- }RGB_Led_t;
- static RGB_Led_t Led;
- /*
- * 编写初始化驱动程序,调用 rt_pin_get 获取 led 句柄,通过句柄设置对应引脚模式为输
- 出模式
- */
- void RGB_Init(void)
- {
- // 获得 led
- Led.LED_R = rt_pin_get("PE.1");
- Led.LED_G = rt_pin_get("PE.4");
- Led.LED_B = rt_pin_get("PA.1");
- // 设置引脚为输出方式
- rt_pin_mode(Led.LED_R, PIN_MODE_OUTPUT);
- rt_pin_mode(Led.LED_G, PIN_MODE_OUTPUT);
- rt_pin_mode(Led.LED_B, PIN_MODE_OUTPUT);
- }
- /*
- * 编写 rgb 不同颜色点灯驱动,通过 rt_pin_write 来控制 gpio 口电平高低,点亮红灯即
- 拉低红灯引脚,拉高其他两个颜色灯的引脚
- 传入参数 on=1:对应亮, on=0:对应灭
- 红灯驱动
- */
- void RGB_Red(rt_bool_t on)
- {
- rt_pin_write(Led.LED_G, PIN_HIGH);
- rt_pin_write(Led.LED_B, PIN_HIGH);
- if (on) {
- rt_pin_write(Led.LED_R, PIN_LOW);
- }else {
- rt_pin_write(Led.LED_R, PIN_HIGH);
- }
- }
- //蓝灯驱动
- void RGB_Blue(rt_bool_t on)
- {
- rt_pin_write(Led.LED_G, PIN_HIGH);
- rt_pin_write(Led.LED_R, PIN_HIGH);
- if (on) {
- rt_pin_write(Led.LED_B, PIN_LOW);
- }else {
- rt_pin_write(Led.LED_B, PIN_HIGH);
- }
- }
- //绿灯驱动
- void RGB_Green(rt_bool_t on)
- {
- rt_pin_write(Led.LED_R, PIN_HIGH);
- rt_pin_write(Led.LED_B, PIN_HIGH);
- if (on) {
- rt_pin_write(Led.LED_G, PIN_LOW);
- }else {
- rt_pin_write(Led.LED_G, PIN_HIGH);
- }
- }
- //白灯驱动 全亮
- void RGB_White(rt_bool_t on)
- {
- if (on) {
- rt_pin_write(Led.LED_G, PIN_LOW);
- rt_pin_write(Led.LED_R, PIN_LOW);
- rt_pin_write(Led.LED_B, PIN_LOW);
- }else {
- rt_pin_write(Led.LED_R, PIN_HIGH);
- rt_pin_write(Led.LED_B, PIN_HIGH);
- rt_pin_write(Led.LED_G, PIN_HIGH);
- }
- }
- //2.3 编写主程序文件
- //编写 rgb 彩灯运行线程,三种颜色依次切换,中间延时 1s
- static void rgb_thread_entry(void* p)
- {
- RGB_Init();
- while(1)
- {
- RGB_Blue(1);
- rt_thread_mdelay(1000);
- RGB_Green(1);
- rt_thread_mdelay(1000);
- RGB_Red(1);
- rt_thread_mdelay(1000);
- RGB_White(1);
- rt_thread_mdelay(1000);
- }
- }
- //创建线程启动函数,用于启动上一步编写的线程主体
- static int Thread_RGB(void)
- {
- rt_thread_t thread = RT_NULL;
- thread = rt_thread_create("rgb", rgb_thread_entry, RT_NULL, 512, 10, 10);
- if(thread == RT_NULL)
- {
- rt_kprintf("Thread_GRB Init ERROR");
- return RT_ERROR;
- }
- rt_thread_startup(thread);
- }
- /*添加将线程初始化添加入系统初始化中*/
- INIT_APP_EXPORT(Thread_RGB);
复制代码 保存 - 编译工程
Ctrl+B, 编译程序,无报错进行下一步,有错找错改错,再编译
上章节说明很详细,详情参阅: 基于RT-Thread的AB32VG1开发环境搭建 - 下载工程
打开 Downloaded 下载器,通过 download 下载生成的.dcf 文件(第一次
使用前需要先安装串口驱动)
扫描串口,点击开始后,按一下板子上复位按键下载程序
上章节说明很详细,详情参阅: 基于RT-Thread的AB32VG1开发环境搭建 - 运行程序
因为例程是添加将线程初始化添加入系统初始化中,所以下载后自动运行,依次 会亮起:蓝-绿-红-白,切换间隔1s
- 本章总结
本章节我们学会了如何在 RT-Thread 上配置添加驱动及RTT库软件包,配置 GPIO 口,总的来说 GPIO 的使用步骤很简单,第一步获取对应 GPIO 句柄,第二步配置 GPIO 模式,之后就可以调用 rtt 函数对 GPIO 进行读写操作了!
|