news 2026/7/21 11:02:36

【英飞凌 Edgi Talk评测】3. 多LED控制(同时闪烁+跑马灯)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【英飞凌 Edgi Talk评测】3. 多LED控制(同时闪烁+跑马灯)

在上一篇文章 【开发环境搭建 + 点灯】 中,已经成功运行了 Blink_LED 示例程序,控制单个 LED3 闪烁。
本篇文章将在此基础上,探索如何控制开发板上的三颗 LED,实现更丰富的灯光效果。

一、LED 硬件资源

开发板上共有3 颗用户 LED,从左到右依次排列,颜色分别为红色、绿色、蓝色。

查看开发板信息

在 RT-Thread Studio 的项目资源管理器中,双击Board Information,可以查看开发板的详细信息和相关

查看 LED 原理图

在开发板信息面板的底部,可以找到Base_Schematic(底板原理图)下载链接,下载后查看 LED 部分的引脚定义:

从原理图可以确认,三颗 LED 对应的 MCU 引脚为:

LED引脚颜色
LED1P16_7
LED2P16_6绿
LED3P16_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中:

  1. 定义三个 LED 引脚
  2. 将三个引脚都初始化为输出模式
  3. 在循环中同时控制三个 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 界面如下:

编译与烧录

  1. 点击工具栏的编译按钮,编译修改后的工程。
  2. 编译成功后,点击下载按钮烧录固件。

运行效果

烧录完成后,三颗不同颜色的 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 界面如下:

编译与烧录

  1. 修改代码后重新编译。
  2. 编译成功后烧录固件。

运行效果

烧录完成后,三颗 LED 会按红 → 绿 → 蓝的顺序依次循环点亮,形成跑马灯效果:

  • 红灯亮:
  • 绿灯亮:
  • 蓝灯亮:

四、总结

通过本章节的实践,掌握了以下技能:

  • 从开发板信息面板和原理图中获取 GPIO 引脚定义
  • 使用GET_PIN()宏映射 MCU 引脚,使用rt_pin_mode()rt_pin_write()控制 GPIO 输出
  • 通过调整逻辑实现多 LED 同步控制和依次循环点亮效果

三颗 LED 的引脚定义是后续所有 GPIO 相关实验的基础:

LED宏定义引脚颜色
LED1GET_PIN(16, 7)P16_7
LED2GET_PIN(16, 6)P16_6绿
LED3GET_PIN(16, 5)P16_5


---------------------
作者:HonestQiao
链接:https://bbs.21ic.com/icview-3515187-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 11:02:30

TMS320F2837xD中断系统深度解析:从PIE架构到双核实战

1. 中断系统架构总览&#xff1a;从外设到CPU的旅程在实时控制领域&#xff0c;尤其是像电机驱动、数字电源这类对时序要求严苛的应用里&#xff0c;中断系统的响应速度和可靠性直接决定了整个系统的性能天花板。TMS320F2837xD这款双核MCU&#xff0c;其内部集成了上百个外设&a…

作者头像 李华
网站建设 2026/7/21 11:02:05

SpringBoot+MyBatis-Plus实战:从零构建RBAC物资管理系统

如果你正在寻找一个能真正跑起来、代码结构清晰、技术栈主流的Java Web项目来巩固SpringBoot技能&#xff0c;或者你需要一个完整的管理系统作为课程设计、毕业设计的基础框架&#xff0c;那么这篇文章就是为你准备的。 今天要拆解的是一个基于SpringBoot的新冠物资管理系统。…

作者头像 李华
网站建设 2026/7/21 11:01:31

7款开源工具替代付费软件,年省5000元

1. 为什么我们需要这些工具&#xff1f;作为一个长期关注效率工具的老用户&#xff0c;我深刻理解现代人面临的"会员困境"。现在各种软件服务都采用订阅制&#xff0c;从办公软件到娱乐平台&#xff0c;从云存储到专业工具&#xff0c;每年光是续费会员就是一笔不小的…

作者头像 李华
网站建设 2026/7/21 10:54:33

深入解析PRU指令集:硬实时控制与确定性执行的核心

1. PRU指令集&#xff1a;实时控制领域的瑞士军刀 如果你正在开发基于德州仪器&#xff08;TI&#xff09;Sitara系列处理器的嵌入式系统&#xff0c;尤其是涉及电机控制、高速通信或实时数据采集这类对时序要求严苛的应用&#xff0c;那么你大概率已经接触过或者听说过PRU&…

作者头像 李华
网站建设 2026/7/21 10:52:08

凝胶与聚合物样品的非接触测量方案解析

引言&#xff1a;软样品测量的核心困境在半导体制造、材料科学、生物医学与精密光学领域&#xff0c;光刻胶、聚合物薄膜、凝胶等软质样品的表面形貌测量长期面临一个核心矛盾&#xff1a;传统的接触式探针轮廓仪在测量这类材料时&#xff0c;探针会直接划伤表面、压入材料内部…

作者头像 李华