1. GPIO输出控制LED闪烁

GPIO输出控制LED闪烁 学习卡片

任务目标

在Zephyr OS环境下,使用GPIO驱动API将指定引脚配置为输出模式,通过交替设置高低电平实现LED周期性闪烁,掌握gpio_pin_configure、gpio_pin_set等核心接口的用法。

环境与依赖

  • Zephyr RTOS 3.x及以上版本
  • 开发板:以nRF52840DK为例(其他板卡需按硬件原理图调整引脚号)
  • 板载LED:P0.13(LED1),低电平点亮

完整代码实现

#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>

/* 根据开发板原理图定义LED引脚 */
#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

#define SLEEP_TIME_MS 500

int main(void)
{
    int ret;

    /* 校验设备就绪 */
    if (!gpio_is_ready_dt(&led)) {
        return -ENODEV;
    }

    /* 配置引脚为输出模式,初始电平为高(LED熄灭) */
    ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
    if (ret < 0) {
        return ret;
    }

    while (1) {
        /* 翻转引脚输出状态 */
        ret = gpio_pin_toggle_dt(&led);
        if (ret < 0) {
            return ret;
        }
        k_msleep(SLEEP_TIME_MS);
    }
    return 0;
}

构建与运行

  1. 在项目prj.conf中无需额外GPIO配置(驱动默认启用)。
  2. 确保开发板设备树中包含led0别名(nRF52840DK默认已定义)。
  3. 构建并烧录:
west build -b nrf52840dk_nrf52840 .
west flash

验证方法

  • 观察现象:烧录后板载LED1应以约1Hz频率闪烁(亮500ms、灭500ms)。
  • 判定通过:LED持续周期性闪烁且系统无异常复位,即表示GPIO输出控制功能正常。
  • 逻辑说明:GPIO_OUTPUT_ACTIVE宏会根据设备树中gpio-hog标志自动适配高低电平有效极性(本案例LED低电平点亮,因此初始输出高电平为熄灭状态)。

常见问题

  • LED不亮:检查led0别名是否在开发板board.dts中正确指向实际引脚,并确认GPIO控制器设备名匹配。
  • 编译报错:确认Zephyr版本≥3.0,且CONFIG_GPIO=y已启用(默认开启)。
  • 引脚冲突:若使用自定义板卡,需确保目标引脚未被其他外设占用。