本帖最后由 HonestQiao 于 2023-11-17 13:21 编辑
申请的时候,看到 NUCLEO-U5A5ZJ-Q 是 Nucleo-144 系列的,因为以前用过 该系列的开发板,由Arduino_Core_STM32提供支持,可以用Arduino IDE进行快速原型开发:
不过,实际进行开发的时候,傻眼了,这块板子,目前还没有被Arduino_Core_STM32提供支持:
虽然用Keil或者STM32CubeIDE也能开发,不过我还是想试试有没有一些新的环境。
今年研究过Nordic的开发板,使用过Zephyr,欣喜的看到,其对 NUCLEO-U5A5ZJ-Q 提供的支持:ST Nucleo U5A5ZJ Q — Zephyr Project Documentation
于是赶紧试了一下,快速建立起了 NUCLEO-U5A5ZJ-Q 的Zephyr开发环境。
实际上,Zephyr可以说是白搭的,能够支持至少500多种开发板呢。
下面,把构建NUCLEO-U5A5ZJ-Q 的Zephyr开发环境的步骤,给大家分享。
我的开发环境操作系统为macOS,Linux环境下面可以直接参考,Windows下面,建议在wsl中进行。
一、Python安装和设置专属运行环境
Zephyr环境需要使用到使用Python开发的工具,所以需要首先安装好Python。
下载Python要使用科学友好上网方式访问 Download Python | Python.org,下载最新的版本即可。
百度上面搜搜Python,提供的下载,99.9999%都是垃圾,居然还要收费,真是娘心被狗给吃了狗都嫌丢脸。
建议安装Python3.8及以后的版本,我的开发环境的版本为3.10.10:
安装好Python以后,使用Python3自带的venv来设置专属运行环境:
# 设定运行环境
python -m venv ~/zephyrproject/.venv
# 进入运行环境
source ~/zephyrproject/.venv/bin/activate
# 升级pip
pip install --upgrade pip
二、git安装
因为Zephyr的源码使用git管理,所以需要安装git工具,访问下面的网址,选择对应的系统安装即可:Git - 安装 Git (git-scm.com)安装完成后,检查安装结果:
三、Stm32CubeProgrammer安装
因为没有使用Keil或者STM32CubeIDE进行开发,烧录系统的时候,可以使用west自身的flash命令,也可以使用Stm32CubeProgrammer工具,或者openocd、pycod等开源工具。使用west flash烧录的时候,编译开发要在同一个环境中。使用Stm32CubeProgrammer或者openocd、pyocd烧录的时候,仅需要hex文件即可。
这次在NUCLEO-U5A5ZJ-Q上,我的编译环境在远程,而烧录在本地macOS,所以在本地macOS使用了Stm32CubeProgrammer和pycod,两者都可以很方便的进行固件的烧录。
注意,Stm32CubeProgrammer不是STM32CubeIDE,不是用于开发,而是用于硬件烧录专用的工具,从 STM32CubeProg - 用于STM32产品编程的STM32CubeProgrammer软件 - 意法半导体STMicroelectronics 下载安装即可:
安装后,将NUCLEO-U5A5ZJ-Q 开发板连接到电脑,再打开Stm32CubeProgrammer,看看能否识别到:
如果Windows不能识别的话,可以从ST官方下载对应的驱动包安装:STSW-LINK009 - 为Windows 7、Windows 8、Windows 10签署的ST-LINK、ST-LINK/V2、ST-LINK/V2-1 USB驱动 - 意法半导体STMicroelectronics,然后重新连接。
识别成功后,点击Connect连接,即可读取Flash的信息:
连接成功后,点击Disconnect,端口连接,以便后续的pyocd可以正常连接。
四、pyocd安装
安装pyocd非常简单,使用python的包管理命令pip安装即可,安装后,还需要安装STM32U5的Keil 支持包:
# 安装; pyocd工具
pip install pyocd
# 更新pyocd
pyocd pack --update
>>>0000640 I Updating pack index... [pack_cmd]
>>>Downloading descriptors (1065/1065)
# 安装Keil STM32U5支持包
pyocd pack --install stm32u5
>>>Downloading packs (press Control-C to cancel):
>>>Keil.STM32U5xx_DFP.2.1.0
>>>Downloading descriptors (001/001)
# 查看安装的支持包
pyocd pack show
>>>Pack Version
>>>--------------------------------
>>>Keil.STM32U5xx_DFP 2.1.0
# 查看支持的开发板
pyocd list --targets | grep -i u5a5zj
>>>stm32u5a5zjtx STMicroelectronics STM32U5A5ZJTx STM32U5 Series, STM32U5A5 pack
>>>stm32u5a5zjtxq STMicroelectronics STM32U5A5ZJTxQ STM32U5 Series, STM32U5A5 pack
>>>stm32u5a5zjyxq STMicroelectronics STM32U5A5ZJYxQ STM32U5 Series, STM32U5A5 pack
# 查看是否支持当前的开发板
pyocd list --boards | grep -i U5A5ZJ-Q
>>>0877 NUCLEO-U5A5ZJ-Q stm32u5a5zjtxq None
依次执行上面的命令,最后出现 NUCLEO-U5A5ZJ-Q 就表示安装好了支持包。
此时,可以将NUCLEO-U5A5ZJ-Q 开发板连接到电脑,然后使用下面的命令查看是否能够识别:
# 连接开发板后,查看是否成功识别,stm32u5a5zjtxq在后续命令中需要作为target使用
pyocd list --probes
>>># Probe/Board Unique ID Target
>>>---------------------------------------------------------------------
>>>0 STLINK-V3 001C002B3132511438363431 ✔︎ stm32u5a5zjtxq
>>>NUCLEO-U5A5ZJ-Q
在使用下面的命令,擦除Flash:pyocd erase --chip --target stm32u5a5zjtxq
>>>0002442 I Erasing chip... [eraser]
>>>0003738 I Chip erase complete [eraser]
五、安装west工具
Zephyr项目使用west工具来进行管理,需要使用pip先安装west工具:
# 安装west
pip install west
west --version
>>>West version: v1.1.0
六、建立Zephyr环境
# 初始化zephyr环境
mkdir ~/zephyrproject
west init ~/zephyrproject
west update
最后一条命令,可以多执行两次,确保最后没有Error出现,结果类似下面:
需要提醒的是,west下载源码,需要科学友好的上网方式,否则可能上网不顺利。
一般在执行前,使用下面的方式设置:
export http_proxy="http://127.0.0.1:8080"
export https_proxy="http://127.0.0.1:8080"
具体设置proxy到哪里,根据你的实际情况确定。
七、安装python支持库
Zephyr官方收集了需要安装的支持库到~/zephyrproject/zephyr/scripts/requirements.txt文件中,除此以外,还要安装elftools:
# 安装支持库
pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt
# 安装 elftools工具
pip install pyelftools
八、安装zephyr SDK
上面使用west部署了Zephyr环境,但还需要安装SDK,才能完成正常的编译开发。
具体步骤如下:
# 安装zephyr SDK
cd ~/zephyrproject/
mkdir -p sdk
cd sdk
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/zephyr-sdk-0.16.3_linux-x86_64.tar.xz
xz -dk zephyr-sdk-0.16.3_linux-x86_64.tar.xz
tar xvf zephyr-sdk-0.16.3_linux-x86_64.tar
cd cd zephyr-sdk-0.16.3/
./setup.sh
九、编译hello world实例
经过以上的步骤,Zephyr环境算是部署了,下面,就需要测试能否正常编译了。
# 编译实例
cd ~/zephyrproject/zephyr
# hello world实例
west build -b nucleo_u5a5zj_q samples/hello_world
ls -lh ./build/zephyr/zephyr.hex
具体编译结果如下:
最终出现 ./build/zephyr/zephyr.hex ,表示编译成功。
十、烧录固件
烧录固件,使用Stm32CubeProgrammer和pyocd。
使用 Stm32CubeProgrammer烧录:
烧录完成后提示:
使用pyocd烧录:
# 擦除烧录一条龙
pyocd flash --erase chip --target stm32u5a5zjtxq ./build/zephyr/zephyr.hex
>>>0002540 I Loading ~/zephyrproject/zephyr/build/zephyr/zephyr.hex [load_cmd]
>>>[==================================================] 100%
>>>0004075 I Erased chip, programmed 28672 bytes (28 pages), skipped 0 bytes (0 pages) at 18.66 kB/s [loader]
如果出现类似下面的错误提示,说明Stm32CubeProgrammer没有断开连接(Disconnect):
0002518 C Error: [Errno 13] Access denied (insufficient permissions) [__main__]
烧录完成后,可以使用串口工具连接到NUCLEO-U5A5ZJ-Q的ST-Link显示的串口,然后按开发板上的RESET按键,重启板子,串口工具会收到如下的信息:
到这里,编译烧录,就都成功了,也就是Zephyr开发环境,成功搭建起来。
其实,对于Nucleo系列的板子,烧录固件还有更简单的办法,那就是直接把固件,拷贝到连接开发板后出现的U盘中即可:
拷贝完成,NUCLEO-U5A5ZJ-Q会自动重启,zephyr.hex文件消失,但系统已经自动更新了。
十一、点灯
编写程序的第一步是输出Hello World,而玩板子的灵魂,则是点灯,点完了,板子就可以收起来压箱底了。
在 ~/zephyrproject/zephyr/samples/basic/blinky 目录中,有点灯的实例,具体内容如下:
可以打开 ~/zephyrproject/zephyr/samples/basic/blinky/src/main.c,看看具体内容:
从上述代码可以看到,这个点灯实例,是控制LED,每秒闪烁一次。
我们可以把SLEEP_TIME_MS修改为100ms,让LED狂闪:
然后编译:
# 编译实例
cd ~/zephyrproject/zephyr
rm -rf build
# blinky实例
west build -b nucleo_u5a5zj_q samples/basic/blinky
ls -lh ./build/zephyr/zephyr.hex
编译完成后,使用west flash或者Stm32CubeProgrammer或者pyocd进行烧录即可。
烧录完成后,按一下开发板RESET按键,串口工具会收到输出:
开发板上的LED也正在狂闪了:
十二、总结
虽然上面的步骤较多,但一旦搭建好了,后面就非常的方便了。
Zephyr的samples中,提供了数百个实例,很多都可以在NUCLEO-U5A5ZJ-Q开发板上使用,减少了学习研究的难度。
如果你也感兴趣的话,也可以试试Zephyr,相信一定会有新的收获。
|