Arm 关于STM32 HAL质量和性能

Arm 关于STM32 HAL质量和性能,arm,stm32,Arm,Stm32,我即将开始一个基于经典STM32L4的产品的新项目。 我在ARM开发方面有很好的经验,但在STM32方面没有特别的经验。 我想知道STmicro(在STM32Cube包中)提供的STM32 HAL和低级驱动程序的质量和性能如何。 我想收集开发人员在这个主题上的经验和反馈。 基本上,我想知道你是否对这段代码感到满意,或者相反,如果你遇到一些问题,如果你中的一些人出于某种原因开发了自己的驱动程序,等等。。。 谢谢大家! 我不喜欢哈尔有很多原因: 这给了伪开发人员错误的感觉,他们不必知道他们的硬件是如

我即将开始一个基于经典STM32L4的产品的新项目。 我在ARM开发方面有很好的经验,但在STM32方面没有特别的经验。 我想知道STmicro(在STM32Cube包中)提供的STM32 HAL和低级驱动程序的质量和性能如何。 我想收集开发人员在这个主题上的经验和反馈。 基本上,我想知道你是否对这段代码感到满意,或者相反,如果你遇到一些问题,如果你中的一些人出于某种原因开发了自己的驱动程序,等等。。。
谢谢大家!

我不喜欢哈尔有很多原因:

  • 这给了伪开发人员错误的感觉,他们不必知道他们的硬件是如何工作的
  • 学习HAL所花费的时间可能比理解硬件工作原理所需的时间更长(通常是更长)
  • 可怕的开销
  • 许多错误

  • 但另一方面,我使用HAL(实际上我做了很多修改)来控制两个外围设备USB和以太网,因为写东西可能会花费太多时间。但正如我之前所写,我知道它在硬件/低层上是如何工作的,并根据我的喜好对它进行了修改。

    我个人不喜欢HAL库,原因如下

  • 它在我的控制器中占用了很多内存,我真的没有空间容纳引导加载程序和应用程序,这里我还需要添加2个HAL开销(一个在引导加载程序中,另一个在应用程序中)
  • 它在内部使用中断(我很确定它是这样的)
  • 它不是没有bug的,我曾经尝试过1.0版,但失败得很惨
  • 调试是痛苦的,你永远不知道错误在哪里,在你的应用程序中还是在HAL中

  • 我喜欢ST的是标准外设库,它只是汇编到C的转换器,非常容易使用

    在从小型8位微控制器过渡到ARM之后,我立即开始使用STM32上的HAL库,并获得了或多或少令人满意的体验。但是它带来了一个开销,就像已经声明的一样,还有一个相当大的一组缺乏文档记录的功能。这可能会导致一些混乱

    然而,与从头开始手工编写代码相比,使用HAL的最大优势在于它提供的抽象级别。当我需要从一种类型的STM32切换到另一种类型时,这很方便;而且当我需要快速启动和运行时我在两个非常不同类型/系列的STM32 micro(L0、L1、F1、F4、F7)上使用了非常类似的代码;事实上,它大部分时间都有效。使用HAL库使转换比需要知道特定微控制器的精确内存映射和寄存器布局时痛苦得多

    话虽如此,但我必须承认,对于现代嵌入式软件,我仍然是一个新手,而且我还在学习,在对基于STM32的不同项目(爱好和专业)进行了大约两年的原型制作工作之后。例如,我仍然需要更多地了解所提供的LL代码

    以不同的软件背景进入嵌入式领域,使用HAL级别的代码,而不是按正确的顺序旋转不同寄存器的单个位,并考虑到所有不同的限制,以使基本的UART/SPI/I2C通信工作,这对我来说相当轻松。总之,STM32 HAL位于纯手工编写的代码和mbed所做的工作之间的中间地带,例如(据我所知,C++/vender不可知抽象)它将复杂的野兽驯服到一个可接受的水平,以便像我这样的普通软件开发人员能够处理它。这需要一些权衡,就像其他人已经提到的那样

    毕竟,STM32 HAL还可以作为一个锅炉板代码库,在某些情况下,它有时比神秘的参考手册更容易阅读/理解。-使用STM32CubeMX生成的HAL代码,在启动时,当我需要快速测试新板时,总是能给我一个更平滑的开始。它还可以帮助进行实验和测试。当性能关键部件需要在以后手动优化时,在设置项目后,甚至在使用STM32CubeMX进行增量调整后,仍然可以进行手动优化。您可以将手写代码与HAL代码混合使用

    2016年以来认识到的一些问题:

    • 当ST发布新的代码更新时,一些常量、结构和函数签名发生了变化。事情似乎在不断发展

    • 缺乏良好的文档(代码文件中的注释)和干净的示例代码(太具体,也没有很好的文档)

    • 复杂的,有时效率低下的代码

    • 拼写错误


    我喜欢HAL和Cube,但你必须阅读驱动程序,并做好承受痛苦的准备。 我曾经像反对者一样摇摆不定,你可以选择你的毒药。
    在我的情况下,如果我使用HAL,我可以吸引真正的程序员来维护我的代码。别再说了,我也有份。事先警告一下,立方体只是创建了一个工作的近似值

    是的,你说得对!USB和以太网等外围设备太复杂,无法从头开始编写驱动程序。但我真的不明白有人用HAL控制GPIOs、UART、SPI和其他简单的外围设备。如果是自己的驱动程序,您可以完全控制外设。谢谢您的回答。您能详细说明第3点和第4点吗?另外,关于意法半导体提供的低级驱动程序呢关于第1点,这不正是HAL的一般用途吗?:)3.为了使抽象层几乎总是增加一些开销,直接外围寄存器配置需要更少的代码,也会更快。供应商提供的库的质量?通常情况下,只需自己看一下代码(简单的一瞥应该可以巩固你的答案)。性能差,通常编写的代码涵盖多个系列,非常臃肿,执行的部分代码不适用于您的芯片,如果被删除,也不完全适用。总的来说