openvela之STM32开发板部署
一、引言
在嵌入式开发中,开发环境的搭建是项目启动的基础。本文以 STM32F746G-DISCO 开发板为例,基于 Ubuntu 系统,详细梳理从编译环境配置到调试工具准备的完整流程,为后续程序开发与烧录筑牢根基。
二、搭建开发环境
1. 配置编译环境
编译 openvela 需配置对应开发环境,可参考openvela 快速入门配置开发环境,完成基础依赖、工具链等配置。
2. 安装编译工具
STM32 开发需特定交叉编译工具,执行以下命令安装:
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
说明:gcc-arm-none-eabi
是针对 ARM 架构的交叉编译器,binutils-arm-none-eabi
是配套的二进制工具集,二者共同为程序编译提供基础支撑。
3. 安装 Java 运行环境
STM32CubeProgrammer 依赖 Java 环境运行,推荐安装 OpenJDK 11(兼容性最佳):
sudo apt install openjdk-11-jre
验证:安装完成后,执行 java -version
,若显示 openjdk version "11.0.x"
相关信息,说明 Java 环境配置成功。
三、准备程序烧录工具:STM32CubeProgrammer 安装
STM32CubeProgrammer 是 ST 官方推出的程序烧录与调试工具,支持通过 ST-Link 连接开发板,以下是完整安装流程:
1. 下载安装包
从 STM32CubeProgrammer 官方下载页 选择 Linux 64-bit 版本(如 stm32cubeprg-lin-v2-20-0.zip),默认保存到 ~/Downloads 目录。
2. 解压
mkdir ~/stm32cubeprog #为避免文件混乱,建议为 STM32CubeProgrammer 单独创建工作目录,方便后续管理
cd ~/Downloads # 进入下载目录
mv stm32cubeprg-lin-v2-20-0.zip ~/stm32cubeprog/
cd ~/stm32cubeprog/ # 进入专属目录
unzip stm32cubeprg-lin-v2-20-0.zip # 解压文件
解压后会生成同名文件夹(如 stm32cubeprg-lin-v2-20-0),内含安装脚本。
3. 执行安装脚本
cd stm32cubeprg-lin-v2-20-0 # 进入解压后的文件夹
chmod +x SetupSTM32CubeProgrammer-2.20.0.linux # 添加执行权限
sudo ./SetupSTM32CubeProgrammer-2.20.0.linux # 运行安装脚本
按照脚本提示一路回车(采用默认配置即可),程序会自动安装到
/usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer/ 目录。
4. 配置环境变量(实现全局调用)
# 打开用户环境变量配置文件
nano ~/.bashrc# 添加程序路径:在文件末尾粘贴以下内容(路径需与实际安装目录一致):
export PATH=$PATH:/usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin# 按 Ctrl+X 退出编辑,输入 Y 确认保存,回车完成操作;
# 执行以下命令使配置立即生效:
source ~/.bashrc
5. 验证安装与启动
直接在终端输入以下命令启动工具:
STM32CubeProgrammer
若弹出软件界面,说明安装成功。若提示 “权限不足”,执行以下命令赋予可执行权限:
sudo chmod +x /usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/STM32CubeProgrammer
四、安装 USB 设备连接依赖库
为保障 STM32CubeProgrammer 与开发板的 USB 通信,需安装 libusb 库:
sudo apt-get install libusb-1.0.0-dev
说明:该库为 USB 设备底层通信提供必要支持,避免后续连接开发板时出现 “设备无法识别” 的问题。
五、配置 ST-Link 驱动(stsw-link 软件包处理)
ST-Link 是开发板的调试接口,需安装驱动规则确保系统有权限访问设备
1. 下载安装包
前往 ST 官网下载 stsw-link 软件包,假设下载文件为 stsw-link007-v3-16-9.zip ,执行以下命令处理:
# 进入下载目录(以 ~/Downloads 为例,可按需修改)
cd ~/Downloads
# 创建专门文件夹存放
mkdir stlink
# 移动压缩包到新文件夹
mv stsw-link007-v3-16-9.zip stlink/
# 进入目标文件夹
cd stlink
# 解压软件包
unzip stsw-link007-v3-16-9.zip
2. 安装驱动规则
进入解压后的驱动规则目录(以实际路径为准,如 ~/stlink/stsw-link007/AllPlatforms/StlinkRulesFilesForLinux
),执行安装脚本赋予 ST-Link 设备访问权限:
# 进入规则文件目录
cd ~/stlink/stsw-link007/AllPlatforms/StlinkRulesFilesForLinux
根据压缩包中的 readme.txt 文件指引完成安装,readme.text内容如下:
# readme.text提示具体安装命令如下:
sudo sh st-stlink-udev-rules-xxxx-linux-noarch.sh
# 通过StlinkRulesFilesForLinux 目录查看,执行安装脚本,按提示输入 I ACCEPT 确认许可
sudo sh st-stlink-udev-rules-1.0.3-2-linux-noarch.sh
# 重新加载 udev 规则使配置生效
sudo udevadm control --reload-rules
sudo udevadm trigger
此步骤解决 Ubuntu 系统下 ST-Link 设备访问权限问题,确保开发板能被识别。
六、项目编译与验证
完成开发环境与工具链配置后,可通过官方示例项目验证环境有效性,以下以 STM32H746G-DISCO 基础工程为例说明编译流程:
1. 下载 openvela 源码
参考下载 openvela 源代码完成代码下载(详情可参考openvela之快速入门)。
2、编译 openvela 适配 STM32H746G-DISCO 的镜像
在完成代码仓库克隆和下载后,按以下流程为 STM32H746G-DISCO 开发板生成所需二进制文件:
cd ~/openvela_project/nuttx # 进入内核目录
# 加载开发板配置(启用LVGL Demo)
./tools/configure.sh stm32f746g-disco:lvgl
# 如需自定义配置(如启用双缓冲),执行menuconfig
make menuconfig
# 开始编译
make
编译完成后,生成的文件位于 nuttx 目录下,包括:
- nuttx.bin:二进制镜像
- nuttx.hex:Intel HEX 格式(推荐用于 STM32CubeProgrammer 烧录)
3. 运行程序
- 烧录前准备
- 确保开发板通过 ST-Link 与电脑连接(参考文档 12 中 “连接开发板”)
- 启动 STM32CubeProgrammer,点击 “ST-LINK Connect” 建立连接,确认显示开发板序列号和目标信息(如 “STM32F746G-DISCO”)
- 执行烧录
- 在 STM32CubeProgrammer 左侧选择 “Erasing & Programming”
- 点击 “Browse” 选择编译生成的nuttx.hex文件
- 勾选 “Skip flash erase before programming”(快速更新,首次烧录建议先执行 “Full chip erase”)
- 点击 “Start Programming”,等待日志显示 “File download complete”
3. 运行 LVGL 示例程序
通过串口工具(如 Minicom)连接开发板的 UART 接口,验证程序运行(在此之前请关闭STM32CubeProgrammer工具避免资源占用):
# 启动Minicom,波特率115200,设备为/dev/ttyACM0(根据实际情况调整)
sudo minicom -D /dev/ttyACM0 -b 115200
以minicom串口调试(MobaXterm/)在串口终端中输入以下命令启动图形演示:
lvgldemo # 后台运行LVGL示例
七、常见问题与解决方案(补充)
- 烧录时提示 “Error: failed to download Sector”
- 解决方案:执行 “Full chip erase” 擦除芯片后重试,确保烧录文件地址(默认 0x08000000)与芯片 Flash 起始地址匹配。
- 串口无法输入命令
- 解决方案:通过
minicom -s
进入配置,关闭硬件流控(Hardware Flow Control: No)和软件流控(Software Flow Control: No)。
总结
通过以上步骤,可完成 openvela 在 STM32F746G 开发板的环境搭建、编译、烧录及示例运行,后续可基于此扩展物联网应用开发,如集成传感器数据采集、网络通信等功能。