第3课:第一个 Zephyr 程序 - Blinky 项目
首先创建一个新的项目目录并初始化必要的文件:
mkdir blinky && cd blinky
mkdir -p src boards/arm
在项目根目录下创建 CMakeLists.txt 文件:
# CMake 最低版本要求
cmake_minimum_required(VERSION 3.20.0)
# 查找 Zephyr 包
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
# 定义项目名称
project(blinky)
# 添加源代码目录
target_sources(app PRIVATE src/main.c)
在 boards/arm 目录下创建设备树 overlay 文件(假设使用 nRF52840 DK 开发板):
// boards/arm/nrf52840dk_nrf52840.overlay
/ {
aliases {
led0 = &led0;
};
leds {
compatible = "gpio-leds";
led0: led_0 {
gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
label = "Green LED 0";
};
};
};
注意: 根据您的开发板型号和 LED 连接情况修改 gpios 参数。
创建 src/main.c 文件:
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS 1000
/* LED0 的设备树节点标识符 */
#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
void main(void)
{
int ret;
bool led_state = true;
if (!device_is_ready(led.port)) {
return;
}
ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
if (ret < 0) {
return;
}
while (1) {
ret = gpio_pin_toggle_dt(&led);
if (ret < 0) {
return;
}
k_msleep(SLEEP_TIME_MS);
}
}
在项目根目录下创建 prj.conf 文件,配置必要的内核选项:
# 启用 GPIO 驱动
CONFIG_GPIO=y
# 启用设备树支持
CONFIG_DEVICE_TREE=y
# 启用系统时钟
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=32768
# 启用日志系统(可选)
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
prj.conf 文件用于配置 Zephyr 内核和模块的功能,主要作用包括:
提示: 可以使用 west build -t menuconfig 命令交互式地修改配置,修改后的配置会保存在 build/zephyr/.config 文件中。
以下是一些常用的 Kconfig 配置选项:
# 启用串口控制台
CONFIG_SERIAL=y
CONFIG_UART_CONSOLE=y
# 启用 shell 支持
CONFIG_SHELL=y
# 设置主堆栈大小
CONFIG_MAIN_STACK_SIZE=2048
# 启用浮点运算支持
CONFIG_FPU=y
# 启用硬件调试
CONFIG_DEBUG=y
CONFIG_DEBUG_OPTIMIZATIONS=y
在项目根目录下执行以下命令构建项目:
west build -b nrf52840dk_nrf52840
注意: 将 nrf52840dk_nrf52840 替换为您实际使用的开发板名称。
构建完成后,使用以下命令烧录程序到开发板:
west flash
程序烧录完成后,您应该能看到开发板上的 LED 以 1 秒的间隔闪烁。
客服小姐姐(优先添加)
讲师微信(备用)