18.5 普通嵌入式开发环境

STM32

STM32 是意法半导体arrow-up-right(STMicroelectronics, ST)从 2007 年开始推出的 32 位微控制器(MCU)系列,基于 ARM Cortex-M 内核,现在是嵌入式开发里最主流的 MCU 之一。

安装 STM32CubeMX

在 FreeBSD 平台进行 STM32 嵌入式的开发,推荐使用 STM32CubeMX 来初始化项目,而 STM32CubeMX 官方只支持 Windows/Linux/macOS 平台,FreeBSD 上使用该软件需要用到 Linux 兼容层。

在 FreeBSD 上安装 Linux 兼容层的教程见本书其他章节,推荐使用 FreeBSD 官方的 linux-rl9 兼容层。

在安装 STM32CubeMX 前,请自行安装 openjdk(版本号>=17.0.6)依赖。

注意:

建议在 /compat/linux/home 下为当前用户创建专用主目录,以非特权用户身份完成 STM32CubeMX 的安装,避免不必要的 root 权限操作。

如:

# mkdir -p /compat/linux/home/username
# cd /compat/linux/home/
# chmod 775 -R username 

配置好兼容层后,到 STM32CubeMX 官网arrow-up-right 备份arrow-up-right下载最新压缩包后进行解压。(写作文章时,下载无需注册登录,仅需点击以访客身份下载即可,填入信息,注意下载链接会被发送到邮件中,请确保邮件地址可以收信。)

解压后进入 Linux 兼容层的 bash:

$ /compat/linux/usr/bin/bash 

定位到解压缩文件夹并运行其中的SetupSTM32CubeMX-{版本号}安装脚本({版本号} 对应你下载的 STM32CubeMX 版本),指定安装的目录即可。

创建桌面快捷方式:

~/Desktop 下创建 STM32CubeMX.desktop 文件,然后写入:

安装其他工具

使用 pkg 安装:

或者使用 ports 构建:

编译与烧录

使用 STM32CubeMX 创建项目,在 Project ManagerProject 里的 Toolchain/IDE 栏选择 CMake,在 Code Generator 里选择 copy all used libraries into project folderGenerate peripheral initialization as a pair of '.c/.h' files per peripheral

生成项目后修改 CMakeLists.txt

注意

该演示针对的是 STM32F103C8T6 等 STM32F1x 的芯片,请根据实际情况修改 CMakeLists.txt。

该演示使用的是 openocd 烧录,也可换为 stlink。

为了在终端使用 arm-gcc-embedded 的工具,应把其二进制文件加入 PATH 中。

对于 sh/bash/zsh,写入 ~/.profile

对于 fish,写入 ~/.config/fish/config.fish 文件:

对于 csh,写入 ~/.cshrc

开始编译:

最后烧录到开发板:

Espressif 乐鑫科技

Espressif 乐鑫科技arrow-up-right 的主要项目是 ESP-IDF,这是他们为 ESP8266、ESP32 等芯片提供的官方开发框架,以 Apache 2.0 许可开源。里面包含 Wi-Fi/Bluetooth 协议栈、FreeRTOS、各种外设驱动、组件库和示例代码。

警告

ESP-IDF 官方尚不支持 FreeBSD,其官网文档也仅列出 Windows/Linux/macOS 的支持。

在 ESP-IDF 仓库的 tools/idf_tools.py 文件下,有:

但这是把 FreeBSD 平台映射到 Linux 的手段,是一种“兼容性 hack”,并非官方的直接支持。

虽然通过一定手段能在 FreeBSD 上成功编译 ESP-IDF,但稳定性不如官方平台,也可能会出现未知错误,因此并不建议在生产环境中使用。

安装 esptool 和 xtensa-esp-elf

使用 pkg 安装:

或者使用 ports 构建:

安装 ESP-IDF

下载最新的 ESP-IDF RELEASE 压缩包

注意

ESP-IDF 的版本可能会更新,请检查 ESP-IDF 的 GitHub 仓库arrow-up-right 来获取最新版。

安装必要工具

使用 pkg 安装:

或者使用 ports 构建:

初次运行 ESP-IDF 安装程序

然后开始编译 ESP-IDF:

此时脚本会自动下载这些工具:

技巧

如果下载过慢,可以复制终端里的下载链接然后使用工具加速下载。

注意

第一次运行 ./install.sh 会卡在 Python 包安装阶段并报错:

原因

PyPI 和 Espressif 的 extra-index 里根本没有 FreeBSD-amd64 的预编译 wheel(官方只提供了 linux-amd64 / win-amd64 / macosx 等)。 同时 espidf.constraints.v5.5.txt 文件里还强制写了 --only-binary cryptography--only-binary tree-sitter-c,导致 pip 拒绝从源码编译。

解决方法:修改 constraints 文件

这行命令旨在放开源码编译限制,把文件中所有 --only-binary 都注释掉,允许 pip 从源码编译 cryptography、tree-sitter-c 等包。

修改完成后,重新执行:

这样才能让安装脚本顺利通过 Python 环境阶段。

成功编译后,就可以开始激活 ESP-IDF 的环境:

对于 sh / bash / zsh 用户:

对于 fish 用户:

编译与烧录示例

擦除整个 Flash

参数说明:

  • --chip 改成你的芯片型号,如 esp32s3esp32c3

  • --port 端口可根据 dmesg | grep usbusbconfig 查找,通常是 /dev/cuaU0/dev/ttyU0

更多子命令帮助:esptool.py {子命令} --help,如 esptool.py write_flash --help

编译项目

执行编译操作:

烧录固件

使用 esptool.py 烧录:

参数说明:

  • -z:压缩模式,速度更快

  • 0x1000:常见起始地址(bootloader 后),如果是完整固件常从 0x0 开始

  • firmware.bin 你编译的固件

或者使用 idf.py 烧录:

Arduino

Arduinoarrow-up-right(阿尔杜伊诺)是一个开源的电子原型平台,2005 年由意大利伊夫雷亚交互设计学院(Interaction Design Institute Ivrea, IDII)的学生和老师发起,最初目的是用于教学(交互设计硕士课程),让非专业人士也能轻松做电子项目。2006 年,面对缺乏资金的窘境,伊夫雷亚交互设计学院(2001-2006)停办。Arduino 的原型却被保留了下来……

与 FreeBSD 项目的愿景一致,Arduino 愿景arrow-up-right是让 Arduino 可供任何人使用。

技巧

Arduino 是一千多年前,一位意大利国王的名字(Arduin of Ivrea,意为“勇敢的朋友”)。而在这位国王的出生地,意大利北部一个如诗如画的小镇 Ivrea(伊夫雷亚),有家叫 di Re Arduino(属于国王 Arduino 的)的酒吧,Arduino 联合创始人经常光临这家酒吧,公司因此而得名。

使用 pkg 安装:

或者使用 ports 构建:

然后加载模块:

加入到 /boot/loader.conf 永久生效:

注意

FreeBSD ports 上的 Arduino IDE 只有 1.8.x 版本的,而最新的 Arduino IDE 已经到了 2.x 版本,这是因为 1.8.x 是基于 Java 写的,易于移植,而 Arduino IDE 2.x(从 2.0 开始)基于 Theia(VS Code 衍生)和 Electron/Chromium 框架,这在 FreeBSD 上移植更复杂,因为 Electron 需要 Linux 专有依赖,且 FreeBSD 的 Chromium port 存在兼容性问题。

如果对此感兴趣,读者可尝试移植。

参考文献

故障排除与未竟事项

FreeBSD 上的 PlatformIO

待撰写。

FreeBSD 上的 Linux 嵌入式开发

待撰写。

FreeBSD 上的 RISC-V 嵌入式开发

待撰写。

最后更新于