RGB 使用说明
中文|English
简介
本例程作为SDK 的第一个例程,也是最简单的例程,类似于程序员接触的第一个程序 Hello World 一样简洁。它的主要功能是让板载的 RGB LED 进行周期性闪烁。
GPIO 简介
GPIO (General Purpose Input/Output) 是 MCU 最常用的外设接口之一,能够在软件控制下配置为 输入模式 或 输出模式:
输入模式:用于读取外部电平状态,例如按键输入。
输出模式:用于控制外设电平,例如点亮 LED、驱动蜂鸣器。
RA8 系列 GPIO 特点
丰富的引脚资源:每个端口可独立配置为输入/输出/复用功能。
多功能复用:除 GPIO 功能外,同一引脚还可能作为 UART、SPI、I2C 等外设的信号线。
电平控制:输出时可驱动高电平或低电平,部分引脚支持开漏模式。
方向控制:输入/输出可动态切换。
RT-Thread 对 GPIO 的抽象
RT-Thread 提供了 PIN 设备驱动框架,通过统一的接口屏蔽底层硬件差异:
rt_pin_mode(pin, mode):设置引脚工作模式(输入/输出/上拉/下拉等)rt_pin_write(pin, value):输出电平(高/低)rt_pin_read(pin):读取输入电平
这样开发者不需要直接操作寄存器,而是通过 RT-Thread 的 API 即可完成 GPIO 控制。
在本示例中,LED 引脚被配置为 输出模式,软件循环输出高低电平,从而实现 LED 闪烁。
硬件说明

如上图所示,Titan Board 提供三个用户 LED,分别为 LED_R(RED)、LED_B(BLUE)、LED_G(GREEN),其中 LED_B 对应引脚 P012。单片机引脚输出低电平即可点亮 LED ,输出高电平则会熄灭 LED。
LED 在开发板中的位置如下图所示:

软件说明
本例程的源码位于/project/Titan_basic_blink_led。RGB LED 对应的单片机引脚定义及 RGB 变换源码可以查阅 src/hal_entry.c。
/* 配置 LED 灯引脚 */
#define LED_PIN_R BSP_IO_PORT_00_PIN_13
#define LED_PIN_B BSP_IO_PORT_00_PIN_12
#define LED_PIN_G BSP_IO_PORT_06_PIN_13
/* 定义 LED 亮灭电平 */
#define LED_ON (0)
#define LED_OFF (1)
/* 定义 8 组 LED 闪灯表,其顺序为 R B G */
static const rt_uint8_t _blink_tab[][3] =
{
{LED_OFF, LED_OFF, LED_OFF},
{LED_ON, LED_OFF, LED_OFF},
{LED_OFF, LED_ON, LED_OFF},
{LED_OFF, LED_OFF, LED_ON},
{LED_ON, LED_OFF, LED_ON},
{LED_ON, LED_ON, LED_OFF},
{LED_OFF, LED_ON, LED_ON},
{LED_ON, LED_ON, LED_ON},
};
void hal_entry(void)
{
rt_kprintf("\nHello RT-Thread!\n");
rt_kprintf("==================================================\n");
rt_kprintf("This example project is a RGB flicker routine!\n\n");
rt_kprintf("==================================================\n");
unsigned int count = 0;
unsigned int group_num = sizeof(_blink_tab)/sizeof(_blink_tab[0]);
unsigned int group_current;
/* 设置 RGB 灯引脚为输出模式 */
rt_pin_mode(LED_PIN_R, PIN_MODE_OUTPUT);
rt_pin_mode(LED_PIN_G, PIN_MODE_OUTPUT);
rt_pin_mode(LED_PIN_B, PIN_MODE_OUTPUT);
rt_pin_write(LED_PIN_R, LED_OFF);
rt_pin_write(LED_PIN_G, LED_OFF);
rt_pin_write(LED_PIN_B, LED_OFF);
do
{
/* 获得组编号 */
group_current = count % group_num;
/* 控制 RGB 灯 */
rt_pin_write(LED_PIN_R, _blink_tab[group_current][0]);
rt_pin_write(LED_PIN_B, _blink_tab[group_current][1]);
rt_pin_write(LED_PIN_G, _blink_tab[group_current][2]);
/* 输出 LOG 信息 */
LOG_D("group: %d | red led [%-3.3s] | | blue led [%-3.3s] | | green led [%-3.3s]",
group_current,
_blink_tab[group_current][0] == LED_ON ? "ON" : "OFF",
_blink_tab[group_current][1] == LED_ON ? "ON" : "OFF",
_blink_tab[group_current][2] == LED_ON ? "ON" : "OFF");
count++;
/* 延时一段时间 */
rt_thread_mdelay(500);
}while(count > 0);
}
编译&下载
RT-Thread Studio:在 RT-Thread Studio 的包管理器中下载 Titan Board 资源包,然后创建新工程,执行编译。
编译完成后,将开发板的 USB-DBG 接口与 PC 机连接,然后将固件下载至开发板。
运行效果
按下复位按键重启开发板,观察开发板上 RBG-LED 的实际效果。正常运行后,RGB 会周期性变化。
此时也可以在 PC 端使用终端工具打开开发板的默认配置的串口,设置波特率为115200N。开发板的运行日志信息即可实时输出出来。
\ | /
- RT - Thread Operating System
/ | \ 5.1.0 build Jul 30 2025 13:29:07
2006 - 2024 Copyright by RT-Thread team
Hello RT-Thread!
==================================================
This example project is an RGB flicker routine!
==================================================
[D/main] group: 0 | red led [OFF] | | blue led [OFF] | | green led [OFF]
[D/main] group: 1 | red led [ON ] | | blue led [OFF] | | green led [OFF]
[D/main] group: 2 | red led [OFF] | | blue led [ON ] | | green led [OFF]
[D/main] group: 3 | red led [OFF] | | blue led [OFF] | | green led [ON ]
[D/main] group: 4 | red led [ON ] | | blue led [OFF] | | green led [ON ]
[D/main] group: 5 | red led [ON ] | | blue led [ON ] | | green led [OFF]
[D/main] group: 6 | red led [OFF] | | blue led [ON ] | | green led [ON ]
[D/main] group: 7 | red led [ON ] | | blue led [ON ] | | green led [ON ]