【前言】
点灯是最基础的操作,学习使用GPIO,也是最常用的MCU功能之一。
【查看官方的dts】
在zephyr的工程下面:\zephyrproject\zephyr\boards\nxp\frdm_mcxw71下面有dts:

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

【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进行控制,如果使用未定的,在以后的工程再进行探讨。
附工程源码:
我要赚赏金
