【AB32VG1开发】基于RT-Thread AB32VG点亮RGB
【AB32VG1开发】基于RT-Thread AB32VG点亮RGB[*]原理图分析
开发板上板载一个三色 RGB 彩灯
开发板引脚连接如下图,引脚 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 进行读写操作了!
页:
[1]