在上一篇文章 【开发环境搭建 + 点灯】 中,已经成功运行了 Blink_LED 示例程序,控制单个 LED3 闪烁。
本篇文章将在此基础上,探索如何控制开发板上的三颗 LED,实现更丰富的灯光效果。
一、LED 硬件资源
开发板上共有3 颗用户 LED,从左到右依次排列,颜色分别为红色、绿色、蓝色。
查看开发板信息
在 RT-Thread Studio 的项目资源管理器中,双击Board Information,可以查看开发板的详细信息和相关
查看 LED 原理图
在开发板信息面板的底部,可以找到Base_Schematic(底板原理图)下载链接,下载后查看 LED 部分的引脚定义:
从原理图可以确认,三颗 LED 对应的 MCU 引脚为:
| LED | 引脚 | 颜色 |
|---|---|---|
| LED1 | P16_7 | 红 |
| LED2 | P16_6 | 绿 |
| LED3 | P16_5 | 蓝 |
在代码中,使用 RT-Thread 提供的GET_PIN(port, pin)宏来定义引脚:
#define LED_PIN_R GET_PIN(16, 7) /* 红色 LED1 */ #define LED_PIN_G GET_PIN(16, 6) /* 绿色 LED2 */ #define LED_PIN_B GET_PIN(16, 5) /* 蓝色 LED3 */二、三灯同闪效果
修改思路
默认的 Blink_LED 代码仅控制 LED3(蓝色)闪烁。要实现三颗 LED 同时闪烁,需要在main.c中:
- 定义三个 LED 引脚
- 将三个引脚都初始化为输出模式
- 在循环中同时控制三个 LED 的电平状态
代码修改
在 Blink_LED 示例工程的主程序main.c中,修改代码如下:
#include <rtthread.h> #include <rtdevice.h> #include <board.h> #define LED_PIN_R GET_PIN(16, 7) #define LED_PIN_G GET_PIN(16, 6) #define LED_PIN_B GET_PIN(16, 5) int main(void) { rt_kprintf("Hello RT-Thread\r\n"); rt_kprintf("This core is cortex-m33\r\n"); /* 将三个 LED 引脚设置为输出模式 */ 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_uint8_t i = 0; while (1) { /* i 为 0 时点亮三个 LED,否则熄灭 */ rt_pin_write(LED_PIN_R, (i == 0) ? PIN_HIGH : PIN_LOW); rt_pin_write(LED_PIN_G, (i == 0) ? PIN_HIGH : PIN_LOW); rt_pin_write(LED_PIN_B, (i == 0) ? PIN_HIGH : PIN_LOW); rt_thread_mdelay(500); /* 延时 500ms */ i++; if (i >= 1) { i = 0; } } return RT_EOK; }代码修改后的 IDE 界面如下:
编译与烧录
- 点击工具栏的编译按钮,编译修改后的工程。
- 编译成功后,点击下载按钮烧录固件。
运行效果
烧录完成后,三颗不同颜色的 LED 将会同时点亮和熄灭:
三、跑马灯效果
修改思路
在三灯同闪的基础上,通过改变控制逻辑,让红、绿、蓝三颗 LED 依次循环点亮,形成跑马灯(流水灯)效果。具体逻辑为:
i == 0:点亮红灯,熄灭绿灯和蓝灯i == 1:点亮绿灯,熄灭红灯和蓝灯i == 2:点亮蓝灯,熄灭红灯和绿灯
代码修改
将主循环修改为:
rt_uint8_t i = 0; while (1) { /* 根据 i 的值依次点亮红、绿、蓝 */ rt_pin_write(LED_PIN_R, (i == 0) ? PIN_HIGH : PIN_LOW); rt_pin_write(LED_PIN_G, (i == 1) ? PIN_HIGH : PIN_LOW); rt_pin_write(LED_PIN_B, (i == 2) ? PIN_HIGH : PIN_LOW); rt_thread_mdelay(500); /* 延时 500ms */ i++; if (i >= 3) { i = 0; } }代码修改后的 IDE 界面如下:
编译与烧录
- 修改代码后重新编译。
- 编译成功后烧录固件。
运行效果
烧录完成后,三颗 LED 会按红 → 绿 → 蓝的顺序依次循环点亮,形成跑马灯效果:
- 红灯亮:
- 绿灯亮:
- 蓝灯亮:
四、总结
通过本章节的实践,掌握了以下技能:
- 从开发板信息面板和原理图中获取 GPIO 引脚定义
- 使用
GET_PIN()宏映射 MCU 引脚,使用rt_pin_mode()和rt_pin_write()控制 GPIO 输出 - 通过调整逻辑实现多 LED 同步控制和依次循环点亮效果
三颗 LED 的引脚定义是后续所有 GPIO 相关实验的基础:
| LED | 宏定义 | 引脚 | 颜色 |
|---|---|---|---|
| LED1 | GET_PIN(16, 7) | P16_7 | 红 |
| LED2 | GET_PIN(16, 6) | P16_6 | 绿 |
| LED3 | GET_PIN(16, 5) | P16_5 | 蓝 |
。
---------------------
作者:HonestQiao
链接:https://bbs.21ic.com/icview-3515187-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。