如何在 Linux 上为 STM32 发现进行开发?

电器工程 linux stm32 发展 开发工具
2022-01-30 12:40:20

我有一个 STM32 探索板,希望能够在 Linux 上对其进行编程。

最简单的方法是什么?

4个回答

对 STM32 Discovery 板(或任何使用 ST-Link 编程器的 STM32)进行编程和调试的简单方法是使用“stlink”项目https://github.com/texane/stlink(但 OpenOCD 似乎也很流行)

ST Nucleo 板也显示为 USB 闪存设备,因此甚至不需要stlink- 只需将文件复制到它们。

有一些关于如何在 Linux 上开发 STM32 发现的好页面,例如http://gpio.kaltpost.de/?page_id=131http://torrentula.to.funpic.de/2012/03/22/ setup-the-stm32f4-arm-development-toolchain/http://jethomson.wordpress.com/2011/11/17/getting-started-with-the-stm32f4discovery-in-linux/

但是我发现最后一个链接最有用。它展示了如何按原样构建 ST 的 STM32 项目 - 唯一的变化是添加他的 Makefile,这似乎是一个完美的解决方案。

在最新版本的 Ubuntu 上,您可以安装一个包含 ARM 编译器的软件包:

sudo apt-get install gcc-arm-none-eabi

请注意,处理器都有些不同。STM32F0..4 都需要不同的编译器标志,并且每个链接描述文件都会略有不同(尽管只是因为 RAM 和闪存大小的变化)。

编辑:如果您想快速入门,您还可以查看http://www.espruino.com它是一个在 STM32 本身上运行的 JavaScript 解释器,所以一旦你安装了“stlink”,你就可以刷到板上了,你可以从那个站点下载一个图像,刷上它,然后连接一个终端应用程序,然后开始编程。

如果您更喜欢文本编辑器和 Makefile 而不是使用 GUI,您可以这样做:

  • 安装提供 arm-none-eabi-gcc 的工具链。在 Archlinux 上,您需要来自社区的 community/arm-none-eabi-binutils、arm-none-eabi-gcc 和 arm-none-eabi-newlib(如果您想调试,还需要 arm-none-eabi-gdb) repo,或https://launchpad.net/gcc-arm-embedded(可以在 Archlinux 的 AUR 中找到 gcc-arm-none-eabi-bin)。
  • 决定是否以及要使用什么库来访问硬件。从我的脑海中,有三个常见的选择:
    1. 没有。你从头开始写一切。不推荐初学者。
    2. STM32Cube : ST 自己提供的 AC 库。
    3. Libopencm3:一个开源库,支持不同供应商提供的相当多的 cortex-m 内核。
    4. STM32PLUS:一个 C++ 库。但是,我不能说更多,因为我还没有测试过。
  • 创建或复制您的第一个项目。
    1. 在没有库的情况下,编写自己的 makefile、链接器脚本、启动代码并运行一个简单的 makefile。祝你好运 ;)
    2. 使用 STM32Cube:下载并安装STM32CubeMX解压缩后,*.exe 文件实际上只是一个 java 文件,您可以使用“java -jar filename.exe”运行它。安装需要sudo。完成后,创建一个项目并为“Truestudio”生成代码。这应该给你一个链接器脚本、启动代码、一些琐碎的主函数(如果我没记错的话还有一个生成文件)的起点。实际上,即使您不使用 STM32Cube 库,STM32CubeMX 也非常适合计算时钟树的值并验证您是否可以按照您的想法配置芯片。
    3. 使用 libopencm3:获取libopencm3 示例,找到与您的开发板匹配的示例并将其用作起点。这些示例应该可以运行了。只需输入“制作”。然后使用该示例作为您自己开发的起点。
    4. 使用 STM32Plus:我不知道。对不起。
  • 将您的项目提交给董事会。要么使用

    1. 串行引导加载程序:stm32flash效果很好。
    2. 调试端口:您可以使用openocd与板上提供的调试适配器通信。Openocd 很棒,但文档并不总是最好的。如有疑问,请加入 openocd irc 频道。那里的人真的很好。
  • 在文本编辑器中编写代码并使用命令行工具。本教程将提供很多提示。

享受

EclipseGCCOpenOCD是一个工具链。它是由EMCU-IT推荐的,这里有更多信息这些页面还建议使用像FreeRTOS.org这样的 RTOS,但这取决于您。

如需在 Linux 中编译 STM32 示例的帮助,请访问此处该链接指向可以调用的示例的生成文件

git clone git://github.com/snowcap-electronics/stm32-examples.git
cd stm32-examples
wget http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_f105-07_f2xx_usb-host-device_lib.zip
unzip stm32_f105-07_f2xx_usb-host-device_lib.zip

还记录了一些小的代码修复,但大多数项目都应该使用

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-

我在https://github.com/JorgeAparicio/bareCortexM上取得了成功(另请参阅链接的博客文章)。我很震惊,我可以简单地单步执行代码或浏览设备内存,而不是在我的代码中插入调试语句或猜测芯片内部发生了什么。

bareCortexM 项目是一个 Eclipse 模板,用于在没有操作系统的 C++ 中使用 Cortex M 系列,尤其是 STM32 进行开发。它被配置为使用 openocd、gcc,并有脚本可以闪存和调试到多个目标,包括一些发现板。通过按照说明安装推荐的 Eclipse 插件,我可以在 Ubuntu 上使用我的 STM32VLDISCOVERY。

按照建议,我将 eclipse 模板与同一作者的用于 STM32 硬件的 libstm32pp C++ 模板库相结合。libstm32pp 提供了一个令人惊讶的完整替代 CMSIS 和经常受到批评的 STM32 驱动程序的编程模型,该模型允许您说出类似PB10::setMode(gpio::cr::GP_OPEN_DRAIN_2MHZ)PINB::setLow()/或PINB::setHigh()所有由于 C++ 模板而大部分内联编译的内容。设置非常好。