配置好了zephyr 工作环境就可以开始自己的项目开发了。

参考:应用程序开发 — Zephyr Project Documentation --- Application Development — Zephyr Project Documentation

1.官方例程

官方给出了一个app文件的例子,我们可以使用这个文件来创建自己的zephyr App 工作空间

cd <home>/zephyrproject
git clone https://github.com/zephyrproject-rtos/example-application my-app

下载了官方例子后,我选择了这种文件结构,使app和zephyr 的源文件分离的模式

注意:在zephyr源文件之外的地方编译工程需要添加几个环境变量

  • ZEPHYR_BASE:zephyr主文件夹的地址
  • ZEPHYR_SDK_INSTALL_DIR :编译工具的位置
  • ZEPHYR_TOOLCHAIN_VARIANT :

工程文件夹如下:

2.zephyr App文件架构

一个zephyr的App文件应该包含这些文件

下面是我的App目录结构

 main.c

// 注册一个日志模块
LOG_MODULE_REGISTER(blinky, LOG_LEVEL_INF); // 获取led0 的设备节点信息
#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios); int main(void)
{
bool led_state = true; if (!gpio_is_ready_dt(&led)) {
LOG_ERR("LED GPIO device not ready");
return 0;
} //配置引脚初始化状态
gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
while (1) {
gpio_pin_toggle_dt(&led);
LOG_INF("LED state: %s", led_state ? "ON" : "OFF");
led_state = !led_state;
k_msleep(500);// Zephyr 的内核延时函数,睡眠 500ms }
}

app.overlay

app.overlay 文件 可以覆盖原有的板子配置,可以在这里添加自己使用的板子的结构

/ {
// 定义 LED 别名
aliases {
led0 = &user_led;
};
// 定义 LED 节点
leds {
compatible = "gpio-leds";
user_led: led_0 {
gpios = <&gpio0 48 GPIO_ACTIVE_HIGH>;
label = "User LED";
};
};
};

CMakeLists.txt  

CMake入口脚本

#-------------------------------------------------------------------------------
# Zephyr Example Application
#
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0 cmake_minimum_required(VERSION 3.13.1)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(my_led LANGUAGES C) # 定义工程 target_sources(app PRIVATE src/main.c) # 源文件

prj.conf

CONFIG_MAIN_STACK_SIZE=4096
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_GPIO=y

其余文件都不太重要。

3.使用west执行编译:

west build -p always -b esp32s3_devkitm/esp32s3/procpu app

4.串口打印

新开一个cmd窗口:执行esp32 的串口

west espressif monitor

zephyr学习(立创实战派开发板): 2. zephyr 点灯+串口通信的更多相关文章

  1. Zephyr学习(二)开发环境搭建

    一.概述 Zephyr支持在Windows.Linux和MacOS环境下开发,这里只介绍如何在Windows下搭建zephyr的开发环境. 二.步骤 2.1安装msys2 msys2是一个Linux模 ...

  2. [嵌入式学习资料]ARM开发学习详解iTOP-4412开发板使用手册

    拿到的最新4412开发板学习使用手册,完全免费,分享一下 下载地址:http://pan.baidu.com/s/1ntrJA8h

  3. 【单片机入门】(四)应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用

    引言 各位大佬,晚上好啊,在上一篇博客中,我们讲了什么是UART串口通讯,以及使用USB转TTL使得单片机可以和c#上位机做一个串口通讯,接下来,为大家带来PWM的概念原理,以及实际案例,使用PWM对 ...

  4. 单片机学习(二)开发板LED灯的控制

    目录 开发板上LED灯相关的电路图 点灯 LED闪烁 LED流水灯 其他效果 灯光二进制计数器 进阶版流水灯 开发板上LED灯相关的电路图 这是P2相关7个引脚的电路图,在默认情况下它是直接接着VCC ...

  5. (转载)用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信

    此文章以visual C++数据採集与串口通信測控应用实战为參考教程 此文章适合VC++串口通信入门 一.页面布局及加入控件 1, 安装好vs2010如图 2, 新建一个基于VC++的MFC项目com ...

  6. JZ2440开发板学习 1. 刚接触开发板, 安装驱动

    一. jtag和串口驱动 1. 驱动下载 http://pan.baidu.com/s/1pJkAHJH 2. 驱动安装 禁用win10的驱动数字签名 http://www.100ask.org/bb ...

  7. 【嵌入式】——arm裸机开发 step by step 之 串口通信

    一.在使用S5PV210的串口发送和接收的时候,首先要对S5PV210的串口进行配置,我们使用轮询方式时的配置有哪些? 1.配置GPIO,使对应管脚作为串口的发送和接收管脚 GPA0 0 1 管脚 2 ...

  8. [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信

    一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...

  9. [学习嵌入式开发板]iTOP-4412实现NFS网络文件系统

    本文转自迅为:http://www.topeetboard.com 学习平台:iTOP-4412开发板 本文讲解如何在 iTOP-4412 开发板上实现 NFS 网络文件系统. 我们使用的软硬件环境是 ...

  10. 小白自制Linux开发板 一. 瞎抄原理图与乱画PCB

    因为墨云是基于高中物理水平的电路知识来学习.而且此前也就玩过树莓派.Esp8266之类的开发板,水平基础趋近于零,所以在写这个系列的时候抱着记录的心态.还望不足之处还望大佬们指正. <论语> ...

随机推荐

  1. 参考案例之“对象调用方法时,如何在方法中使用对象,例如(root.display()的display方法中使用root)”

    一.对象调用方法时,如何在方法中使用对象,例如(root.display()的display方法中使用root) 1.测试方法 @Test public void suanfa24() { TreeN ...

  2. 掌握Node.js原理,开启异步编程之旅

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  3. golang random string

    package main import ( "math/rand" "strings" "testing" "time" ...

  4. 二:简单的C/S阻塞模型

    C/S阻塞模型是指客户端/服务器阻塞模型,它描述了一种基于阻塞的网络通信方式.在阻塞模型中,客户端发送请求给服务器,并等待服务器的响应.在等待服务器响应的过程中,客户端的操作会被阻塞,直到服务器响应返 ...

  5. TVM Pass优化 -- 移除无用函数(Remove Unused Function)

    定义 移除无用函数,Remove Unused Function,顾名思义,就是删除Module中定义但未用到的函数 当然,它也是一个模块级的优化, 举例子: def get_mod(): mod = ...

  6. 使用 Python 接口编译和优化模型 (AutoTVM)

    在本节,将介绍与TVMC相同的知识,但展示的是如何使用Python API来完成它.完成本节后,我们将使用适用于 TVM 的 Python API 来完成以下任务: 为TVM Runtime编译预训练 ...

  7. uni-app项目从0-1基础架构搭建全流程

    前情 最近新接了一个全新项目,我负责从0开始搭建小程序,我选用的技术栈是uni-app技术栈,UI库选择的是uview-plus,CSS引入现在流行的tainlwindcss,实现CSS原子化书写,实 ...

  8. keepalived使用方法及原理介绍

    原理访问:http://www.yunweipai.com/35350.html Nginx双机高可用案例访问:https://www.jianshu.com/p/a6b5ab36292a

  9. Linux下安装mamba-ssm踩过的坑

    起初的原因是,想要跑一个用到了mamba-ssm的项目,故尝试在wsl中配置mamba-ssm库.提示需要pip install mamba-ssm后报错频繁,遇到了许多问题.查阅了很多blog和is ...

  10. WPF绑定与通知属性到界面

    绑定与通知属性到界面 本文同时为b站WPF课程的笔记,相关示例代码 前言 在上一篇文章C#代码事件里面,我们介绍了利用给控件命名的方式,在后端代码中访问并修改属性.这样子直截了当,但是这样后端代码依赖 ...