打印
[STM32U5]

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

[复制链接]
5981|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HonestQiao|  楼主 | 2023-11-17 13:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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)安装完成后,检查安装结果:
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 下载安装即可:



安装后,将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,相信一定会有新的收获。




使用特权

评论回复
沙发
xusiwei1236| | 2023-12-11 10:14 | 只看该作者
帮主厉害

使用特权

评论回复
板凳
单片小菜| | 2023-12-11 18:43 | 只看该作者
这个太厉害了,linux也可以玩STM32了

使用特权

评论回复
地板
lajfda003| | 2023-12-11 18:50 | 只看该作者
楼主是高手,我在想,是不是只要是可以生成hex的操作系统,都没有问题。

使用特权

评论回复
5
kjkujkj22| | 2023-12-11 19:08 | 只看该作者
代码是相通的,平台不受限。

使用特权

评论回复
6
储小勇_526| | 2023-12-25 17:15 | 只看该作者
越玩越高端了,还在为会freertos而窃喜时,发现已然OUT

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

94

帖子

2

粉丝