Eclipse + GNU ARM + STM32 - HAL 或 SPL

电器工程 手臂 stm32 海合会 皮质 图书馆
2022-01-17 08:31:18

我将从 ARM 开发开始(经过 2 年的 AVR),并拿起了 STM DISCOVERY 板,上面装有 stm32f4 微处理器。

我决定使用 eclipse + ARM gcc,因为我不喜欢 Keil 的代码限制,而且我没有钱购买付费版本。

按照教程,我安装了 eclipse 以及 gcc ARM 工具 + openocd + make utils 等。

我的问题是关于“包”插件的。像每个初学者一样,我对是使用新的 STM HAL 还是旧的 SPL 感到困惑。

我的理解是,HAL 已经将抽象实现到可以称为 Arduino 等效于 arm 的水平。另一方面,SPL 提供了足够的抽象来加快编码速度,但您仍然需要在芯片级别进行处理。

有了这种理解,我想坚持使用 SPL 来更好地理解事物,而不是使用 HAL。

我想知道的是,为 STM 使用包是否会隐含地强制我使用 HAL?如果是这样,有人可以告诉我如何在我的设置中使用 SPL 吗?

3个回答

如我所见,SPL 与您使用的 IDE 无关。您可以在项目中简单地包含相关模块(例如 stmf4xx_dma.c 和 stmf4xx_dma.h),并使用 .c 和 .h 文件中公开的(并且描述得很好)的功能。事实上,我一直在用 gcc、openocd 和 SPL 学习 stmf411 nucleo,只使用 windows 命令提示符;没有IDE。eclipse 中的包可能会迫使您使用 HAL(因为在 eclipse 下载的“Packages”文件夹中,我只看到 HAL 模块)。

HAL 本身 IMO 似乎远远超出了必要的层次。而直接访问寄存器会让人厌烦并且难以阅读。SPL 似乎恰到好处。st.com 论坛上的专家 clive1 也更喜欢 SPL 而不是 HAL。这是我在那个论坛上的问题......可能会有所帮助。

在 Nucleo stmf411 上需要 USART 帮助

我对 HAL 没有任何经验,但多次使用 SPL 来节省我的时间。在我看来,这个嵌入式处理器的目标社区是 2 组:第一组对硬件层不感兴趣。软件程序员,普通爱好者和 Arduino,覆盆子崇拜者。如果你在这个组中,HAL 对你来说是个不错的选择。来自电子和硬件社区的秒数,谁更喜欢

GPIO_A->PIN &= ~(1 << 15);

LED_On(1)

用于打开 LED 并想知道他们基本上在做什么。那么如果你在这个小组中并且有足够的时间阅读你的 MCU 的参考手册和编程手册,那么寄存器级编程可能是另一种选择。但如果您只想在以上 2 个选项之间做出决定:HAL 有更好的未来,因为 ST 的支持,但 SPL 是一种更容易理解新初学者的方法。也许这可以帮助http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/

获取此 IDE: STM32 的 System Workbench - 它是免费的,基于 Eclipse,并且在一个包中同时包含 arm-gcc 和 openocd。

关于库:除了 SPL 和 HAL,现在还存在 LL。每个人都有一些优点和缺点,你必须选择你需要的。据我了解,它们都具有 ST 的实验状态。低于我对他们每个人的成绩:

  • SPL:老旧,笨重,没有额外的内存使用,灵活
  • HAL:实际,繁琐,额外的内存使用,不灵活
  • LL:实际,重量轻,没有额外的内存使用,灵活

我的成绩的简短描述:

  • 繁琐 - 大闪存使用,“超级”通用功能,用于外围工作
  • 额外的 ram 使用 - 它与 HAL 有关,它在位于 ram 的结构中具有外围状态的副本,并随时随地使用它
  • 不灵活 - 再说一次关于 HAL,它有很多针对不同情况的功能,但是!它们中的大多数不能用于真实设备(人们尝试重新初始化 HAL 以便从 usart 逐字节接收>_<,TIM+DMA 的所有功能都是为了重写 TIM 寄存器而实现的,没有任何其他......)

稍微恢复一下 HAL:它对新手来说有一个很大的优势 - 它由 STMCubeMX 支持。

编辑:

我忘记了libopencm3 - 它是备用库。我没用过。