这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【mcxw71学习使用zephyr开发】2、点灯

共1条 1/1 1 跳转至

【mcxw71学习使用zephyr开发】2、点灯

高工
2025-12-09 13:16:26     打赏

【前言】

点灯是最基础的操作,学习使用GPIO,也是最常用的MCU功能之一。

【查看官方的dts】

在zephyr的工程下面:\zephyrproject\zephyr\boards\nxp\frdm_mcxw71下面有dts:

image.png

在frdm_mcxw71.dts中有对开发板LED的描述:

image.png

【GPIO选用】

在dts中,我们看到有led0的设备是可以使用的。

【代码编写】

编写Main.c内容如下:

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

/* 使用设备树 alias: led0 */
#define LED_NODE DT_ALIAS(led0)

#if DT_NODE_HAS_STATUS(LED_NODE, okay)
#define LED_DEV DT_GPIO_CTLR(LED_NODE, gpios)
#define LED_PIN DT_GPIO_PIN(LED_NODE, gpios)
#define LED_FLAGS DT_GPIO_FLAGS(LED_NODE, gpios)
#else
#error "Board does not have a working led0 alias"
#endif

void main(void)
{
    const struct device *gpio_dev;
    bool led_is_on = false; // false = off (high for ACTIVE_LOW), true = on (low)

    gpio_dev = DEVICE_DT_GET(LED_DEV);
    if (!device_is_ready(gpio_dev))
    {
        return;
    }

    gpio_pin_configure(gpio_dev, LED_PIN, GPIO_OUTPUT | LED_FLAGS);

    while (1)
    {
        led_is_on = !led_is_on;
        gpio_pin_set(gpio_dev, LED_PIN, (int)led_is_on);
        k_msleep(500);
    }
    return;
}

在代码中,我选中led0,然后DT_NODE_HAS_STATUS(LED_NODE, okay)确保在dts中有led0这个节点,并且使能。

使用gpio_pin_configure配置bule灯为输出。

最后在while中使用gpio_pin_set来翻转LED灯。

【总结】

在zephyr中使用gpio,先从设备树中查找到可以用的LED然后进行配置,再对其值进行写入,就可以完成对GPIO的控制。当然这是建立在开发板的dts已经有的IO进行控制,如果使用未定的,在以后的工程再进行探讨。

附工程源码:

my_hello.zip




关键词: mcxw71     zephyr     点灯    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]