ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Zephyr应用: 20-ESP32S3

Zephyr应用: 20-ESP32S3 本课目录第一部分 认识 ESP32-S3第二部分 安装 ESP32 Toolchain第三部分 查看支持哪些 ESP32-S3 Board第四部分 编译 Hello World第五部分 烧录第六部分 查看串口第七部分 Board Directory第八部分 Device Tree第九部分 与 STM32 的区别第十部分 本课实验摘要本课带领你体验 Zephyr 的跨平台能力将同一份 Zephyr 程序从 STM32 迁移到 ESP32-S3 上运行。课程涵盖 ESP32-S3 硬件特性、ESP-IDF 工具链安装、开发板选择、Hello World 编译烧录、串口监视、Board 目录与 Device Tree 结构并通过与 STM32 的对比展示 Zephyr 在 GPIO、线程、信号量等 API 上“代码几乎不用修改”的核心优势。最后通过 Hello World、Blinky、Button、UART、Thread 五个实验掌握 Zephyr 跨平台开发流程。本课前置要求在开始本课之前请先确认你已具备以下基础与条件以便顺利跟上实验节奏Zephyr 基础已完成 STM32 平台的 Hello World 实验熟悉west build、west flash等基本命令了解设备树Device Tree的基本概念知道led0、button0等节点别名的作用。硬件准备一块 ESP32-S3 开发板如官方 DevKitC、WeAct、XIAO 等本课以esp32s3_devkitc为例一根 USB 数据线需支持数据传输部分开发板通过 USB Serial/JTAG 直接烧录与监视无需额外 USB-UART 转接器一台已安装 Zephyr 开发环境的电脑本课基于 Mac Ubuntu VM 环境演示。预计耗时约 6090 分钟。其中工具链确认与 Hello World 编译烧录约占一半时间其余实验Blinky、Button、UART、Thread可在此基础上快速完成。如果你已满足以上条件就可以直接进入第一部分 认识 ESP32-S3开始学习。这一课开始学习Zephyr 在第二个平台上的使用体会 Zephyr 的跨平台能力。20-ESP32S3本课目标学习如何让同一份 Zephyr 程序运行在 ESP32-S3 上。完成以后你应该能够Mac └── Ubuntu VM │ ├── west build ├── west flash └── west espressif monitor │ ▼ ESP32-S3第一部分 认识 ESP32-S3ESP32-S3 主要特性双核 Xtensa LX7 最高 240MHz WiFi Bluetooth LE USB Serial/JTAG很多开发板无需额外 USB-UART 转接器 Flash PSRAM部分型号Zephyr 已经支持很多 ESP32-S3 开发板包括官方 DevKitC、WeAct、XIAO 等。第二部分 安装 ESP32 ToolchainZephyr 使用Espressif SDKESP-IDF。安装west blobs fetch hal_espressif然后west update如果此前已完成 Zephyr 官方安装这一步通常已经准备好了。确认west zephyr-export第三部分 查看支持哪些 ESP32-S3 Board例如west boards|grepesp32s3通常可以看到类似esp32s3_devkitc esp32s3_box3 weact_esp32s3_b xiao_esp32s3...具体取决于你的 Zephyr 版本。第四部分 编译 Hello World例如cd zephyrproject/zephyr west build-b esp32s3_devkitc samples/hello_world生成build/里面会看到zephyr.bin zephyr.elf zephyr.map第五部分 烧录连接 USB。查看ls/dev/ttyUSB\*或者ls/dev/ttyACM\*ESP32-S3 很多开发板会出现/dev/ttyACM0烧录west flash如果自动检测不到west flash --esp-device /dev/ttyACM0第六部分 查看串口打开west espressif monitor输出\*\*\* Booting Zephyr OS build\*\*\* Hello World!第七部分 Board Directory查看boards/例如boards/espressif/里面包含esp32_devkitc/ esp32s3_devkitc/ esp32s3_box3/每个 Board 都有board.cmake Kconfig\*.dts\*.yaml第八部分 Device Tree例如esp32s3_devkitc.dts里面可以看到led0 button0 uart0 gpio spi i2c后续我们所有 GPIO 配置都来自这里。第九部分 与 STM32 的区别STM32ESP32-S3Cortex-MXtensa LX7CubeMXESP-IDFST HALESP HALST-LinkUSB/JTAGUART 下载USB 下载无 WiFiWiFi/BLE但是GPIO Thread Semaphore Message Queue Timer WorkQueue代码几乎不用修改。STM32 到 ESP32-S3 迁移示例下面以“点亮板载 LED”为例对比同一段 GPIO 控制逻辑在 STM32 与 ESP32-S3 上的写法差异。可以看到除了设备树引脚定义不同应用层代码几乎完全一致步骤STM32HALESP32-S3Zephyr获取 GPIO 设备__HAL_RCC_GPIOA_CLK_ENABLE()手动开启时钟DEVICE_DT_GET(DT_GPIO_CTLR(LED0_NODE))从设备树获取配置引脚为输出HAL_GPIO_Init()配置GPIO_MODE_OUTPUT_PPgpio_pin_configure_dt(led, GPIO_OUTPUT_ACTIVE)点亮 LEDHAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)gpio_pin_set_dt(led, 1)熄灭 LEDHAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)gpio_pin_set_dt(led, 0)延时HAL_Delay(500)k_msleep(500)关键差异引脚来源STM32 需要手动指定端口和引脚号如GPIOA、GPIO_PIN_5并手动开启外设时钟ESP32-S3 通过DT_ALIAS(led0)从设备树自动解析引脚无需关心具体端口。API 风格STM32 使用 HAL 库的HAL_GPIO_xxx系列函数ESP32-S3 使用 Zephyr 统一的gpio_pin_xxx_dt系列 API。可移植性STM32 代码换板子要改端口和引脚宏Zephyr 代码换板子只需改设备树应用层main()一行不用动。这就是 Zephyr 最大的优势。第十部分 本课实验完成以下实验Hello World ↓ Blinky ↓ Button ↓ UART ↓ Thread下面是一个基于 ESP32-S3 的完整 Blinky 示例。它通过设备树引用 LED 节点初始化 GPIO 后让板载 LED 以 1 秒周期闪烁#includezephyr/kernel.h#includezephyr/device.h#includezephyr/drivers/gpio.h/* 从设备树获取 LED 节点esp32s3_devkitc.dts 中定义的 led0 */#defineLED0_NODEDT_ALIAS(led0)/* 获取该节点的 GPIO 控制器设备实例 */staticconststructdevice*led_devDEVICE_DT_GET(DT_GPIO_CTLR(LED0_NODE));/* 获取该节点对应的 GPIO 引脚编号 */staticconstgpio_pin_tled_pinDT_GPIO_PIN(LED0_NODE);/* 获取该节点配置的 GPIO 标志如上拉/下拉/开漏等 */staticconstgpio_dt_spec ledGPIO_DT_SPEC_GET(LED0_NODE,gpios);voidmain(void){intret;/* 检查 GPIO 控制器是否就绪 */if(!device_is_ready(led_dev)){printk(Error: LED device %s is not ready\n,led_dev-name);return;}/* 将 LED 引脚配置为输出模式 */retgpio_pin_configure_dt(led,GPIO_OUTPUT_ACTIVE);if(ret0){printk(Error: failed to configure LED pin %d\n,led_pin);return;}printk(Blinky started on ESP32-S3\n);/* 循环闪烁点亮 500ms熄灭 500ms */while(1){gpio_pin_set_dt(led,1);/* LED 亮 */k_msleep(500);gpio_pin_set_dt(led,0);/* LED 灭 */k_msleep(500);}}编译烧录west build-besp32s3_devkitc samples/hello_world west flash提示DT_ALIAS(led0)对应esp32s3_devkitc.dts中的led0节点。若你的开发板 LED 引脚不同只需修改设备树别名或改用GPIO_DT_SPEC_GET指定具体节点应用层代码无需改动——这正是 Zephyr 跨平台开发的体现。全部使用ESP32-S3完成。如果程序编写规范除了 -bboard 名称不同应用层代码几乎无需改动。本课知识点✓ ESP32 Toolchain✓ west flash✓ west espressif monitor✓ Board Support✓ Device Tree✓ Zephyr 跨平台开发
返回列表