[STM32U5] 【NUCLEO-U5A5ZJ-Q测评】Zephyr开发环境建立

[复制链接]
9710|5
 楼主| HonestQiao 发表于 2023-11-17 13:10 | 显示全部楼层 |阅读模式
本帖最后由 HonestQiao 于 2023-11-17 13:21 编辑

申请的时候,看到 NUCLEO-U5A5ZJ-Q 是 Nucleo-144 系列的,因为以前用过 该系列的开发板,由Arduino_Core_STM32提供支持,可以用Arduino IDE进行快速原型开发: 557216556df605a690.png


不过,实际进行开发的时候,傻眼了,这块板子,目前还没有被Arduino_Core_STM32提供支持:
552156556dff3e95dd.png 318526556e005dfc9f.png


虽然用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:
878406556e1c897382.png


安装好Python以后,使用Python3自带的venv来设置专属运行环境:
  1. # 设定运行环境
  2. python -m venv ~/zephyrproject/.venv

  3. # 进入运行环境
  4. source ~/zephyrproject/.venv/bin/activate

  5. # 升级pip
  6. pip install --upgrade pip


二、git安装
因为Zephyr的源码使用git管理,所以需要安装git工具,访问下面的网址,选择对应的系统安装即可:Git - 安装 Git (git-scm.com)安装完成后,检查安装结果:
  1. git --version


三、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 下载安装即可:
327876556e5fca44a5.png


安装后,将NUCLEO-U5A5ZJ-Q 开发板连接到电脑,再打开Stm32CubeProgrammer,看看能否识别到:
948086556e6df4bf09.png
如果Windows不能识别的话,可以从ST官方下载对应的驱动包安装:STSW-LINK009 - 为Windows 7、Windows 8、Windows 10签署的ST-LINK、ST-LINK/V2、ST-LINK/V2-1 USB驱动 - 意法半导体STMicroelectronics,然后重新连接。


识别成功后,点击Connect连接,即可读取Flash的信息:
309066556e6f12429d.png

连接成功后,点击Disconnect,端口连接,以便后续的pyocd可以正常连接。

四、pyocd安装
安装pyocd非常简单,使用python的包管理命令pip安装即可,安装后,还需要安装STM32U5的Keil 支持包:
  1. # 安装; pyocd工具
  2. pip install pyocd

  3. # 更新pyocd
  4. pyocd pack --update
  5. >>>0000640 I Updating pack index... [pack_cmd]
  6. >>>Downloading descriptors (1065/1065)

  7. # 安装Keil STM32U5支持包
  8. pyocd pack --install stm32u5
  9. >>>Downloading packs (press Control-C to cancel):
  10. >>>Keil.STM32U5xx_DFP.2.1.0
  11. >>>Downloading descriptors (001/001)

  12. # 查看安装的支持包
  13. pyocd pack show
  14. >>>Pack                 Version
  15. >>>--------------------------------
  16. >>>Keil.STM32U5xx_DFP   2.1.0

  17. # 查看支持的开发板
  18. pyocd list --targets | grep -i u5a5zj
  19. >>>stm32u5a5zjtx   STMicroelectronics STM32U5A5ZJTx  STM32U5 Series, STM32U5A5   pack
  20. >>>stm32u5a5zjtxq  STMicroelectronics STM32U5A5ZJTxQ STM32U5 Series, STM32U5A5   pack
  21. >>>stm32u5a5zjyxq  STMicroelectronics STM32U5A5ZJYxQ STM32U5 Series, STM32U5A5   pack

  22. # 查看是否支持当前的开发板
  23. pyocd list --boards | grep -i U5A5ZJ-Q
  24. >>>0877   NUCLEO-U5A5ZJ-Q                  stm32u5a5zjtxq           None
依次执行上面的命令,最后出现 NUCLEO-U5A5ZJ-Q 就表示安装好了支持包。

此时,可以将NUCLEO-U5A5ZJ-Q 开发板连接到电脑,然后使用下面的命令查看是否能够识别:
  1. # 连接开发板后,查看是否成功识别,stm32u5a5zjtxq在后续命令中需要作为target使用
  2. pyocd list --probes
  3. >>>#   Probe/Board       Unique ID                  Target
  4. >>>---------------------------------------------------------------------
  5. >>>0   STLINK-V3         001C002B3132511438363431   ✔︎ stm32u5a5zjtxq
  6. >>>NUCLEO-U5A5ZJ-Q

在使用下面的命令,擦除Flash:
  1. pyocd erase --chip --target stm32u5a5zjtxq
  2. >>>0002442 I Erasing chip... [eraser]
  3. >>>0003738 I Chip erase complete [eraser]

五、安装west工具
Zephyr项目使用west工具来进行管理,需要使用pip先安装west工具:
  1. # 安装west
  2. pip install west
  3. west --version
  4. >>>West version: v1.1.0

六、建立Zephyr环境
  1. # 初始化zephyr环境
  2. mkdir ~/zephyrproject
  3. west init ~/zephyrproject
  4. west update

最后一条命令,可以多执行两次,确保最后没有Error出现,结果类似下面:
617106556ee130d492.png

需要提醒的是,west下载源码,需要科学友好的上网方式,否则可能上网不顺利。
一般在执行前,使用下面的方式设置:
  1. export http_proxy="http://127.0.0.1:8080"
  2. export https_proxy="http://127.0.0.1:8080"
具体设置proxy到哪里,根据你的实际情况确定。

七、安装python支持库
Zephyr官方收集了需要安装的支持库到~/zephyrproject/zephyr/scripts/requirements.txt文件中,除此以外,还要安装elftools:
  1. # 安装支持库
  2. pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt

  3. # 安装 elftools工具
  4. pip install pyelftools

八、安装zephyr SDK  
上面使用west部署了Zephyr环境,但还需要安装SDK,才能完成正常的编译开发。
具体步骤如下:
  1. # 安装zephyr SDK
  2. cd ~/zephyrproject/
  3. mkdir -p sdk
  4. cd sdk
  5. wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/zephyr-sdk-0.16.3_linux-x86_64.tar.xz
  6. xz -dk zephyr-sdk-0.16.3_linux-x86_64.tar.xz
  7. tar xvf zephyr-sdk-0.16.3_linux-x86_64.tar
  8. cd cd zephyr-sdk-0.16.3/
  9. ./setup.sh


九、编译hello world实例
经过以上的步骤,Zephyr环境算是部署了,下面,就需要测试能否正常编译了。
  1. # 编译实例
  2. cd ~/zephyrproject/zephyr

  3. # hello world实例
  4. west build -b nucleo_u5a5zj_q samples/hello_world
  5. ls -lh ./build/zephyr/zephyr.hex


具体编译结果如下:
240726556ef59726f0.png

最终出现 ./build/zephyr/zephyr.hex ,表示编译成功。

十、烧录固件
烧录固件,使用Stm32CubeProgrammer和pyocd。

使用 Stm32CubeProgrammer烧录:
108876556f0000b649.png
烧录完成后提示:
368416556f01ee40a3.png

使用pyocd烧录:
  1. # 擦除烧录一条龙
  2. pyocd flash --erase chip --target stm32u5a5zjtxq ./build/zephyr/zephyr.hex
  3. >>>0002540 I Loading ~/zephyrproject/zephyr/build/zephyr/zephyr.hex [load_cmd]
  4. >>>[==================================================] 100%
  5. >>>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按键,重启板子,串口工具会收到如下的信息:
564546556f122a994d.png

到这里,编译烧录,就都成功了,也就是Zephyr开发环境,成功搭建起来。

其实,对于Nucleo系列的板子,烧录固件还有更简单的办法,那就是直接把固件,拷贝到连接开发板后出现的U盘中即可: 235136556f80bea494.png
拷贝完成,NUCLEO-U5A5ZJ-Q会自动重启,zephyr.hex文件消失,但系统已经自动更新了。

十一、点灯
编写程序的第一步是输出Hello World,而玩板子的灵魂,则是点灯,点完了,板子就可以收起来压箱底了。
在 ~/zephyrproject/zephyr/samples/basic/blinky 目录中,有点灯的实例,具体内容如下:
568206556f1b20b093.png

可以打开 ~/zephyrproject/zephyr/samples/basic/blinky/src/main.c,看看具体内容:
645556556f1e3ad26c.png

从上述代码可以看到,这个点灯实例,是控制LED,每秒闪烁一次。
我们可以把SLEEP_TIME_MS修改为100ms,让LED狂闪:
333806556f254a1b6e.png

然后编译:
  1. # 编译实例
  2. cd ~/zephyrproject/zephyr
  3. rm -rf build

  4. # blinky实例
  5. west build -b nucleo_u5a5zj_q samples/basic/blinky
  6. ls -lh ./build/zephyr/zephyr.hex

编译完成后,使用west flash或者Stm32CubeProgrammer或者pyocd进行烧录即可。
烧录完成后,按一下开发板RESET按键,串口工具会收到输出:

1806556f35abd0d4.png

开发板上的LED也正在狂闪了:
4433_1700197337_2.gif


十二、总结
虽然上面的步骤较多,但一旦搭建好了,后面就非常的方便了。
Zephyr的samples中,提供了数百个实例,很多都可以在NUCLEO-U5A5ZJ-Q开发板上使用,减少了学习研究的难度。
如果你也感兴趣的话,也可以试试Zephyr,相信一定会有新的收获。




xusiwei1236 发表于 2023-12-11 10:14 | 显示全部楼层
帮主厉害
单片小菜 发表于 2023-12-11 18:43 | 显示全部楼层
这个太厉害了,linux也可以玩STM32了
lajfda003 发表于 2023-12-11 18:50 | 显示全部楼层
楼主是高手,我在想,是不是只要是可以生成hex的操作系统,都没有问题。
kjkujkj22 发表于 2023-12-11 19:08 | 显示全部楼层
代码是相通的,平台不受限。
储小勇_526 发表于 2023-12-25 17:15 | 显示全部楼层
越玩越高端了,还在为会freertos而窃喜时,发现已然OUT
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

115

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部