|  | 
 
| 【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 进行读写操作了!
 
 
 
 | 
 
+12 最近谁赞过 |