硬件平台:正点原子阿波罗STM32F429IGT6
zephyr版本:Zephyr version 3.7.99
开发环境:ubuntu 24.4
一.环境搭建
环境搭建已经有很多优秀的文章了,我就不再重复造轮子了,搭建zephyr环境请参考,如果觉得有需要我出一篇环境搭建请下方留言。
1.Getting Started Guide — Zephyr Project Documentation
2.手把手教 Zephyr 嵌入式实时操作系统开发环境的安装配置_zephyr os-CSDN博客
二.创建自己的board
创建board的思路就是,找跟自己使用平台比较接近的例程,复制一份,修改一下文件名,config文件以及设备树。怎么查看跟自己板子接近的例程呢?
首先打开zephyr官网:Getting Started Guide — Zephyr Project Documentation
找到
- Supported Boards
然后摁下CTRL+F搜索
如果你是新手,支持列表也没有你板子接近的型号,强烈建议换一个支持的板子
查到之后,去zephyr源码目录找板子的文件夹
在zephyrproject/zephyr/boards/st目录下,这个目录就是ST公司出的板子
用vscode打开zephyr工程源码
进入zephyrproject/zephyr/boards/st,把stm32f429i_disc1复制一份,文件夹命名为stm32f429i_alientek,里边的文件也要按照这个格式改
然后修改文件内容,doc文件夹不用改,就从上往下改吧
openocd.cfg:
source [find interface/stlink-dap.cfg]
transport select "dapdirect_swd"
set CHIPNAME STM32F429IGTx
set BOARDNAME STM32F429I-ALIENTEK
source [find target/stm32f4x.cfg]
$_TARGETNAME configure -event gdb-attach {
echo "Debugger attaching: halting execution"
reset halt
gdb_breakpoint_override hard
}
$_TARGETNAME configure -event gdb-detach {
echo "Debugger detaching: resuming execution"
resume
}
board.cmake
# SPDX-License-Identifier: Apache-2.0
# keep first
board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw")
board_runner_args(jlink "--device=STM32F429IG" "--speed=4000")
board_runner_args(pyocd "--target=stm32f429xg")
board_runner_args(pyocd "--flash-opt=-O reset_type=hw")
board_runner_args(pyocd "--flash-opt=-O connect_mode=under-reset")
# keep first
include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
board.yml
board:
name: stm32f429i_alientek
vendor: st
socs:
- name: stm32f429xx
Kconfig.defconfig
# STM32F4DISCOVERY board configuration
# Copyright (c) 2016 Linaro Limited.
# SPDX-License-Identifier: Apache-2.0
if BOARD_STM32F429I_ALIENTEK
config INPUT
default y if DISPLAY
config MEMC
default y if DISPLAY
endif # BOARD_STM32F429I_ALIENTEK
Kconfig.stm32f429i_alientek
# Copyright (c) 2016 Linaro Limited.
# SPDX-License-Identifier: Apache-2.0
config BOARD_STM32F429I_ALIENTEK
select SOC_STM32F429XX
stm32f429i_alientek_defconfig
# SPDX-License-Identifier: Apache-2.0
# Enable MPU
CONFIG_ARM_MPU=n
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=180000000
CONFIG_CLOCK_STM32_HSE_CLOCK=25000000
# Enable HW stack protection
CONFIG_HW_STACK_PROTECTION=y
CONFIG_SERIAL=y
# console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
# enable GPIO
CONFIG_GPIO=y
stm32f429i_alientek.yaml
identifier: stm32f429i_alientek
name: ALIENTEK STM32F429I
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
ram: 192
flash: 2048
supported:
- counter
- i2c
- spi
- display
vendor: st
如果你也用的阿波罗429,可以直接复制粘贴
比较特殊的有两处需要说明一下
1.deconfig文件,429ig不支持mpu,所以要选n,不然运行不了;时钟配置为180M,晶振为25M
2.dts的pll部分
这样工程就配好了,是不是很简单?
三.测试验证
编译:
west build -p always -b stm32f429i_alientek samples/hello_world/
编译成功现象:
先打开串口:
sudo minicom -D /dev/ttyUSB0 -b 115200
烧录:
west flash
烧录成功串口打印:
参考文章: