Zephyr入门 移植正点原子探索者STM32F407
环境:
Windows/WSL2 ubuntu20.4
开发板: 正点原子探索者STM32F407
在嵌入式开发领域,Zephyr RTOS 是一个轻量级、模块化且高度可定制的实时操作系统(RTOS),专为资源受限的物联网(IoT)和嵌入式设备设计。
搭建开发环境
参考官方文档<Getting Started Guide>
ubuntu安装工具包
1 | sudo apt install --no-install-recommends git cmake ninja-build gperf \ |
- 补充安装
cmake、python、dtc
这三个工具要满足版本要求, 否则后续操作会出错
官网版本要求
| Tool | Min. Version |
|---|---|
| CMake | 3.20.5 |
| Python | 3.10 |
| Devicetree compiler | 1.4.6 |
1、python:Ubuntu20.04下更新系统Python版本_ubuntu20.04 python版本-CSDN博客
2、cmake:ubuntu 20.04安装(升级)cmake - 知乎
- 安装完验证
1 | cmake --version |
虚拟环境拉取源码和包 & 安装SDK
1、创建一个虚拟环境
1 | python3 -m venv ~/zephyrproject/.venv |
2、激活虚拟环境
1 | source ~/zephyrproject/.venv/bin/activate |
❗
python --version再验证一下python的版本
3、安装管理zephyr的库工具west
1 | pip install west |
4、拉取Zephyr源代码
1 | west init ~/zephyrproject |
5、导出Zephyr的包Package
1 | west zephyr-export |
6、安装python依赖
1 | west packages pip --install |
7、安装SDK
1 | cd ~/zephyrproject/zephyr |
安装USB透传工具 & ST-LINK下载工具
由于采用的是
ST-LINK, 要在WSL2环境下载程序需要安装stm32cubeprogrammer
同时还需要把ST-LINK透传到WSL2里
安装USB透传工具
- 1、管理员打开
powershell安装
1 | winget install --interactive --exact dorssel.usbipd-win |
- 2、插入ST-LINK, 终端依次输入
1 | usbipd list // 查看usb列表 |
- 3、打开
WSL2,输入lsusb,能看到stlink即可
安装ST-LINK下载工具
1、下载
SetupSTM32CubeProgrammer-2.20.0.linux2、解压:unzip
3、执行安装脚本
SetupSTM32CubeProgrammer-2.20.0.linux- 出现交互界面,确认安装即可
4、添加环境目录
1 | echo 'export PATH=$PATH:$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin' >> ~/.bashrc source ~/.bashrc |
- 测试
STM32_Programmer_CLI --version
编译工程烧录测试
- 选择
stm32f4_disco开发板编译blinky例程west build -p always -b stm32f4_disco samples/basic/blinky
- 烧录
west flash
❗如果usb无权限,可临时修改usb权限
sudo chmod 666 /dev/bus/usb/001/003# 根据你的设备路径调整
- 烧录成功即跑通, 接下来我们适配探索者开发板
适配正点原子探索者开发板
探索者开发板基于STM32F4, 所以我们找一个类似的开发板进行修改即可
打开zephyr源码路径下boards/st, 从stm32f072b_disco拷贝到新建文件夹stm32f407_alientek, 且将几个文件修改为和文件夹名一致, 参考下面
修改以下几个文件
board.cmakeboard.ymlKconfig.defconfigKconfig.stm32f407_alientekstm32f407_alientek_defconfigstm32f407_alientek.dtsstm32f407_alientek.yaml
board.cmake
1 | # SPDX-License-Identifier: Apache-2.0 |
board.yml
1 | board: |
Kconfig.defconfig
1 |
|
Kconfig.stm32f407_alientek
1 | # Copyright (c) 2016 Linaro Limited. |
stm32f407_alientek_defconfig
1 | # SPDX-License-Identifier: Apache-2.0 |
stm32f407_alientek.dts
拷贝
boards/st/stm32f4_disco底下的stm32f4_disco.dts
修改led0映射的green_led_4, 探索者的LED0接的是PF9引脚, 低电平使能
1 | green_led_4: led_4 { |
修改设备树里的外部时钟和系统时钟, HSE时钟晶振为25M
❗这里根据实际晶振数值来, 如果晶振是8M就不用改
1 | &clk_hse { |
修改锁相环PLL参数
❗这里根据实际晶振数值来, 如果晶振是8M就不用改
1 | &pll { |
stm32f407_alientek.yaml
1 | identifier: stm32f407_alientek |
修改完之后进行编译
1 | west build -p always -b stm32f407_alientek samples/basic/blinky |
烧录
1 | west flash |
观察开发板灯闪烁
适配串口打印
正点原子的打印串口连接的是UART1
所以修改设备树, 增加如下代码
1 | chosen { |
编译, 烧录, 测试如下
补充: windows搭建开发环境
实测windows编译速度比不上linux, 所以还是推荐用linux做开发
- 打开cmd, 安装必要的包
1 | winget install Kitware.CMake Ninja-build.Ninja oss-winget.gperf Python.Python.3.12 Git.Git oss-winget.dtc wget 7zip.7zip |
- 验证工具版本
1 | cmake --version |
- 激活
python虚拟环境
1 | cd $Env:HOMEPATH // 可以选择自己的路径 |
- 安装
1 | pip install west |
1 | west init zephyrproject |
1 | west zephyr-export |
1 | python -m pip install @((west packages pip) -split ' ') |
- 安装SDK
因为按照SDK会默认安装在C盘路径(不在乎空间占用的可以默认), 所以采用手动安装
参考: https://docs.zephyrproject.org/latest/develop/toolchains/zephyr_sdk.html#toolchain-zephyr-sdk-install
下载SDK包, 解压后进入执行./setup.cmd
然后注册ZEPHYR_SDK_INSTALL_DIR环境变量, 注册上面SDK存放的路径
注册完之后要重新打开终端
- 进入zephyr路径, 编译测试
1 | west build -p always -b stm32f4_disco samples/basic/blinky |