Eclipse + GNU ARM + STM32-HAL或SPL


10

我将开始进行ARM开发(经过2年的AVR),并选择了带有stm32f4微处理器的STM DISCOVERY板。

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

按照教程,我已经将eclipse与gcc ARM工具+ openocd + make utils一起安装了。

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

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

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

我想知道的是,是否为STM使用软件包会隐式迫使我使用HAL?如果是这样,有人可以指出我如何在我的设置中使用SPL吗?


1
“教程”有点含糊,所以我不了解“程序包”插件,也不知道什么是SPL(STM外设库?)或SPCL。也许我只是没有资格回答这个问题,但是与STM32一起工作了两年以上让我感到奇怪...
阿森纳

2
SPL是Standard Peripheral Library,另一方面,我也不知道SPCL。
Bence Kaulics,2015年

2
如今,STM首选和支持的方法是使用STM32CubeMX,它基于HAL生成代码。我必须承认这是很方便的,虽然我不是自动化工具的风扇,因为他们隐藏重要的东西..
尤金嘘。

1
尽管它应该与其他STM32处理器SPL版本基本兼容,但我不认为ST具有适用于STM32F7的SPL。
2015年

对不起SPCL位。那是个错误。仍然习惯使用首字母缩写词。还仔细检查了一下,我的板子是stm32f4变体。另一个错误。仍然存在普遍的问题,如何在eclipse中使用标准外围设备库?
Ankit 2015年

Answers:


6

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

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

在Nucleo stmf411上需要USART帮助


1
我完全同意你的看法。HAL似乎对整个抽象概念有些落伍。尽管使用它可以更快地开发程序,但您不会真正了解正在发生的事情,我认为这对于学习和证明未来至关重要。作为测试,我在uvision中创建了一个项目,并选择了旧版支持而不是软件包,并且其中似乎包含了SPL文件。也感谢您的链接!
Ankit

1

我没有使用HAL的经验,但是多次使用SPL来节省时间。我相信,此嵌入式处理器的目标社区分为2个小组:第一个对参与硬件层不感兴趣的小组。软件程序员,普通爱好者和Arduino,树莓派崇拜者。如果您属于这一组,那么HAL似乎是您的不错选择。来自电子和硬件社区的秒,他们更喜欢

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

LED_On(1)

打开LED并想知道他们在做什么。那么如果您属于这一组并且有足够的时间阅读您的MCU的参考手册和编程手册,那么寄存器级编程可能是另一种选择。但是如果您只想在上述两种选择之间做出选择:由于ST'的支持,HAL的前景更好,但是SPL是了解新手的更简单方法。也许这可以帮助http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/


1
感谢您的链接,有趣的阅读!您是正确的,对于初学者来说,SPL似乎是学习的更好方法(这也是我选择的方法)。顺便说一句,您的回复应该是LED_Off
Ankit

1

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

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

  • SPL:旧,笨重,无需额外使用ram,灵活
  • HAL:实际,麻烦,额外的ram使用,不灵活
  • LL:实际,轻巧,不使用额外的内存,灵活

我的成绩的简短说明:

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

对于HAL进行一些修复:对于新手来说,它具有一大优势-由STMCubeMX支持。

编辑:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.