我即将开始基于经典STM32L4产品的新项目。 我在ARM开发方面有很好的经验,但在STM32中则没有。 我想知道STM32提供的STM32 HAL和低级驱动程序的质量和性能是什么(在STM32Cube包中)。 我想收集有关该主题的开发人员经验和反馈。 基本上我想知道你是否对这段代码感到满意,或者相反如果你遇到一些问题,如果有些人出于某些原因开发了自己的驱动程序等等...... 谢谢!
答案 0 :(得分:7)
我不喜欢HAL有很多原因:
但另一方面,我使用HAL(实际上经过深度修改)来控制两个外设USB和USB。以太网作为写入可能需要花费太多时间。但正如我之前所写,我知道它如何在硬件/低级别上工作并根据自己的喜好对其进行修改。
答案 1 :(得分:4)
从较小的8位微控制器过渡到ARM后,我开始立即在STM32上使用HAL库,并获得了或多或少令人满意的体验。但它带来了已经陈述过的开销和一大堆记录不完整的功能。这可能会导致一些混乱。
然而,使用HAL而不是手写代码从头开始的最大优点是它提供的抽象级别。当我需要从一种STM32切换到另一种时,这就派上用场了。而且当我需要快速启动和运行时。 - 我在STM32微型(L0,L1,F1,F4,F7)的几种非常不同的类型/系列上使用了非常相似的代码;它实际上大部分时间都在工作。使用HAL库使转换变得更加痛苦,比你需要知道确切的内存映射和注册特定微处理器的布局...
说到这里,我需要承认,在谈到现代嵌入式软件时,我仍然是一个新手,而且我还在学习,经过大约2年的基于STM32的不同项目(爱好和专业)的原型设计工作。例如,我仍然需要了解有关提供的LL代码的更多信息。
使用不同的软件背景输入嵌入式字段,使用HAL级代码而不是按正确顺序对不同寄存器的单个位进行twiddeling,并考虑所有不同的限制以获得基本的UART / SPI / I2C通信工作,为我缓解了一些事情。恕我直言,STM32 HAL位于纯手写代码和mbed之间的中间位置(例如C ++ / vender-agnostic抽象(据我所知))。 - 它将复杂的野兽驯服到可接受的水平,这样像我这样的普通软件开发者就可以处理它。这带来了一些权衡,就像其他人已经提到的那样......
毕竟,STM32 HAL也可以作为锅炉板代码库,在某些情况下,它有时比隐藏的参考手册更容易阅读/理解。 - 当我需要快速测试新电路板时,使用STM32CubeMX生成的HAL代码总是让我在启动时更加平稳。它还可以帮助实验和测试。当性能关键部分需要稍后进行手动优化时,在设置项目后仍然可以实现,甚至可以使用STM32CubeMX逐步调整它。您可以将手写代码与HAL代码混合使用。
自2016年以来确认的一些问题:
ST发布新代码更新时,某些常量,结构和函数签名发生了变化。事情似乎在不断发展。
缺乏良好的文档(代码文件中的注释)和干净的示例代码(太具体,也没有详细记录)。
令人费解,有时效率低下的代码。
拼写错误。
答案 2 :(得分:3)
由于以下原因,我个人不喜欢HAL库。
我喜欢的ST是标准外设库,它只是汇编到C转换器,非常容易使用。
答案 3 :(得分:-1)
我喜欢HAL和Cube,但您必须阅读驱动程序并做好准备受苦。 我曾经像否定者一样摇摆着,你可以选择毒药。 在我的情况下,如果使用HAL,则可以吸引真正的程序员来维护我的代码。不要再说了,我正在参加HAL。请注意,多维数据集只是创建了一些有效的近似值。