STM32F4和HAL


23

因此,我一直在尝试使用STM32F407(我是ARM的新手),并决定使用HAL库编写一个简单的应用程序,因为ST似乎已经停止了标准外围设备库。所以我的问题是,HAL有什么意义?StdPeriph是否正在履行职责?他们为什么要为HAL停产呢?在我看来,HAL真是一团糟。

该文档是AWFUL的文档,至少对于StdPeriph而言,有一个完整的参考文献,其组织得很好,可以轻松找到所需的内容(http://stm32.kosyak.info/doc/)。对于HAL,有一个结构看似随机的不完整的PDF(http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf)。阅读任何部分,例如有关外围设备的内容,我似乎都无法理解配置和正确定制它的要求。它看起来更像是不想忘记东西的人的个人笔记,而不是参考。

我知道我可以使用CubeMX初始化GPIO并配置外设,但是我的目标是自己做,所以我更好地了解它们的操作,而没有一款软件可以为我完成全部工作。难道我做错了什么?是我中的ARM新手使我感到困惑吗?还是现有文档不好?


像ChibiOS这样的东西可能更适合您吗?它们既有RTOS,又有非常好的HAL,无需RTOS就可以使用。
IgorEE '16

ST尚未完全终止标准外围设备库,但它们不会为较新的系列发布新版本。他们表示(在他们论坛的某个位置,但我似乎找不到它),他们将继续支持已为其发布SPL(包括STM32F4)的系列的SPL。由于您不熟悉ARM,因此最好与HAL一起使用。我已经使用SPL编写了很多模块,所以过渡会很痛苦,我一直推迟进行。这很不好,因为一旦我决定使用一个新的家庭,就会有更多的代码移植到HAL
Tut

该电子书:leanpub.com/mastering-stm32是STM32世界的入门指南,对于新手(也是专业人士)来说都是不错的介绍。
洛伦佐·梅拉托

Answers:


13

创建自己的库非常简单。他们的寄存器规格文档非常好,即使不是全部,大多数外设都易于安装。我发现使用他们的库更加痛苦。但是也许就是我。这对于s​​t,nxp,ti和atmel来说确实如此(仅英特尔和微芯片而言就不多了)。

为什么要更改库,可能有多种原因,一些是新老板接任,一些部门被关闭,另一接任了。营销部门希望产品具有新的形象。正如ElectronS所说,这可能是尝试从硬件中抽象出来,以吸引那些不愿意或不能做裸机的用户。我会进一步讲,他们可能正在尝试与Arduino现象竞争。哪一个mbed以及其他所有人都一直尝试做并且失败了(甚至在Arduino之前)。

无论如何,离硬件越远,它就会变得肿,速度越慢,因此您在rom,ram和mhz上每单位所花费的费用就更多。只是这样您就可以花费相同的时间进行编程?只是做不同的事情?

您说您来自PIC世界,现在他们确实在工具方面做得不错,但是他们的芯片文档却令人恐惧,有些情况最糟。他们用库和沙箱进行了补偿。

在一天结束时,尝试各种选择,尝试竞争的产品,以查看其工具的比较。您可以免费做很多事情,只是看它是否有意义并且您可以编译东西。甚至可以使用指令集模拟器。找到适合您的一个。

请注意,没有固定库选项始终可用。您可以使用什么工具链,什么主机操作系统,什么ide,编辑器等,您不受限制。如果在这方面他们的选择非常有限,那么他们可能会在零件编程时坚持使用它,如果继续使用其他芯片或供应商(如果可以)。

为了销售这样的芯片产品,他们必须提供一个开发环境,而不论它们是全部产品还是粘贴在一起的免费产品。他们倾向于将某种类型的图书馆放在一起。它只需要看起来就足够好,而领导示例的眨眼就足以使您的管理层或硬件团队在他们的产品中进行设计,那么当您的电路板产品被扔到软件上时,就是痛苦的时刻。是否到达。如果这几乎可行,但对于芯片供应商来说不是一个很大的胜利,因为您现在将为此获得一点技术支持。因此,几乎不在那儿是他们的最大利益。

芯片供应商只需要看起来足够好就可以赢得设计大奖。他们必须不断改进(更改)产品以吸引新老客户。因此,他们将有工作要做,相距多远以及继续支持多少个先前的库。因此,您习惯的几乎所有图书馆最终都会消失。因此,学会适应(或不要使用他们的东西而自己去做,可以无限期地支持)。当然,理想情况下,您只需要为每个产品开发一次应用程序,使您的固件完美(如果使用第三方库,祝您好运),并且您无需再去寻找一台可以加载其工具链的计算机。复制它,并记住如何使用该旧库。请记住,不仅应该保存源代码,还应该保存它们的所有工具和文档。

它们的库通常仅在一个工具链上受支持,可能在两个IDE下受支持,有时仅在Windows和某些版本上受支持。同样,如果您做自己的事,那么您将没有任何限制,最绝对不是ARM的限制。您始终可以阅读他们的任何/所有库,以了解他们的工作方式。但这通常很可怕,他们没有使用图书馆的A团队开发人员,我提取了几行代码来询问面试候选人该代码有什么问题。

为了节省芯片和软件方面的时间和精力,它们经常回收相同的ip,因此一旦您看到外围设备如何在其芯片上工作,它在许多其他芯片上的工作方式通常相同。是的,无论有没有它们的库,时钟系统都可能很棘手。对芯片进行砌块的可能性很高,这就是我大多数芯片/板砌块发生的地方。有助于了解其芯片的工作方式,例如AVR的芯片(如果不是全部的话,大多数)可以在芯片复位时进行重新编程,因此不会弄乱重新编程所需的引脚或挂起重新编程所需的逻辑的任何错误代码都不会没关系,您可以重新编程这些芯片。其中一些供应商(第一个)是内部引导加载程序,您可以使用皮带(例如,在st world中为BOOT0)进行选择,

一种尺寸适合所有人,一种适合所有人。对于软件尤其如此。因此,任何将硬件抽象化的尝试都会使其变得缓慢而肿。如果那是您真正想要的,那么最好也可以使用更大的芯片并在上面运行linux。不过,这很多是由于开发人员的结果,他们不想弄脏他们的手,所以我们基本上已经要求这样做了,他们正在尝试提供它。

同样,不要将自己锁定在st或任何一家供应商中(除非为时已晚,并且管理层和/或硬件团队已将其粘在您身上,请注意stm32产品很好且易于使用)。货比三家。德州仪器(TI)将大量鸡蛋放入cortex-m4篮子中。您可以在许多此类Arm产品以及供应商支持的解决方案上完成mbed操作。

您始终可以依赖的一件事是,它们将不时更改库,并最终停止支持您习惯的库。


关于开发自己的库的观点颇有说服力,几乎说服了,我想尝试一下,除了stm32fxx参考手册之外,您还需要什么?我还应该阅读臂芯手册吗?我会使用CMSIS吗?我将如何访问寄存器和内存?您能否详细说明或提供入门指南
ElectronS

还有更多需要考虑的事情。每行代码都会增加风险。向老板解释,您打算使用成千上万的其他人的代码行,而无需查看正在使用的所有代码。多层代码,尤其是抽象时的代码层,会导致二进制文件更大且性能下降。因此,再次向您的老板解释说,这1000万种产品每套将花费35美分或350万美元,因为您选择使用图书馆会导致自己变得懒惰。
old_timer '16

您的老板可以雇用一大群人来代替您,用这种钱,对每一行代码进行审查,以使他们没有得到10,000个单元,并发现他们必须将所有因使用有风险的软件而导致的软件错误丢弃。并使用较小的零件,以较低的时钟频率降低成本,从而消耗较少的电量,并且一次充电可使用更长的时间。有时值得付出努力。当然,有时不是。
old_timer '16

感谢您所说的更多观点,但是您能以最好的方式回答我的问题吗?使用CMSIS和HAL .h文件获取寄存器名称和存储位置?
ElectronS

没有“最好的”,使用这个词会使它成为个人观点,而不是事实。只是选择一个并开始,或者像我可能做的那样,尝试一个直到碰到路障,然后再尝试另一个,然后绕开将每个路障推回到下一个路障,直到一个或全部突破。
old_timer '16

14

让我告诉你,我们中的许多人都对HAL库抱有同样的失望,它们的确记录不清,含糊不清,但仍然包含许多错误。

因此,回答您的问题,为什么ST决定采用HAL很简单:

  1. 他们想创建一个硬件抽象层,用简单的英语来说,这意味着他们希望软件开发和代码独立于微控制器,因此,如果您今天为stm32f4编写代码,则需要几年后才能迁移到stm32f7将变得容易,代码将高度模块化。

  2. 这还允许更多的开发人员(例如软件程序员)与微控制器一起工作,而无需真正理解或深入了解硬件如何完成任务的细节。像ST和TI这样的公司(现在就开始这条路)正在尝试使嵌入式开发类似于PC代码开发,在PC开发中,您使用高级驱动程序来开发代码FAST。ARM设备的高性能弥补了其驱动程序和库中笨拙和缺乏优化的不足。

  3. 我认为STM32cubeMX是使用HAL库的好工具,因为最耗时的工作是初始化外围设备,现在您可以在很短的时间内完成操作,可视界面可以轻松更改而不会影响用户代码(如果您在适当的位置编写代码)可以使用Stm32cubeMx,然后查看代码并尝试了解它们使用每个函数的方式和原因,以这种方式,您尝试解决一个问题,并在附近有解决方案手册以进行更正。伟大的海事组织。

  4. ARM内核非常安静,因此我们在8位微控制器上使用的旧方法(例如直接处理寄存器(以汇编方式编写C))不可行,这很耗时,并且由于复杂的体系结构而导致代码难以维护(请检查代码)。例如时钟设置)


6
这一切都是可以理解的,但是所有这些同样适用于StdPeriph,不是吗?我的意思是,它已经是一个硬件抽象库,那么创建一个新的而不是改进旧的又有什么意义呢?我真的很好奇,我对ARM还是很​​陌生,我使用PIC已有很多年了。
约翰

对于符合CMSIS的库
Scott Seidman

1
据我了解,@ john与标准库相比,HAL更抽象,并且对硬件的依赖性更低。
ElectronS

12

我知道这将是漫长而漫长的过程,但是正如我们刚刚(成功)使用HAL发布了我们的新产品一样,我认为值得考虑。另外,我不为ST工作,我讨厌HAL的每一部分,几乎用StdPeriph重新启动了该项目,我感到很痛苦-但现在我明白了为什么。

首先,有一点背景。我们开发了超低功耗遥测系统,我们的产品由STM32L1驱动。当我们开始使用固件时,我们为(裸机)ST设备选择了通常的选择:手动完成所有操作,使用StdPeriph库或使用HAL。ST团队说服我们选择了HAL-因此我们做到了。这很痛苦,我们不得不解决软件中的错误(I2C部分使我们疯狂一段时间了),但我仍然不喜欢整个体系结构。但这有效。

一年多以前,当我从台式机切换到嵌入式时,我被无法命名甚至无法掌握的奇怪事物所震惊。随着时间的流逝,我能够理解正在发生的事情,或者更确切地说,正在发生的事情:嵌入式世界正在转变。硅芯片每天都在便宜,而MCU则更强大,功能更广泛。越来越多的设备,无论其大小,功率需求如何,都依赖于通用MCU。越来越多的公司加入了游戏,吸引了许多具有不同背景的新开发人员。“平均”文化已从传统的“具有编程向导技能的EE人”转变为“具有模糊硬件知识的SW人”。

这是好是坏无关紧要。它只是发生。实际上,它也发生在软件世界中,不止一次。2000年的网络繁荣吸引了PHP / MySQL新手-告诉他们CPU中有寄存器,他们会回答“我正在使用Linux,因此我的操作系统中没有注册表”。早先,以保护模式运行的多用户操作系统允许懒惰的开发人员在整个职业生涯中从不设置ISR,而且还可以。甚至更早之前,键盘和屏幕制造的打卡机和打印机制造商也疯狂起来。

是的,当前的趋势使我个人感到难过,因为我看到无知的开发人员对最新的闪亮技术感到敬畏,却完全无法将它们与历史联系起来。当我看到一个年轻的孩子在2015年用WebGL用Javascript编写游戏时,我想大喊“没有什么新东西!早在1995年,我就对C ++和3Dfx SDK做了同样的事情!”。故事并没有说明他的游戏可以在我的手机上运行,​​而我的游戏需要一台游戏机PC(和一个安装程序,我无法通过网络推送更新)。事实是,他可以在一个月内开发出游戏,而在六个月或十二个月内我可以完成相同的游戏。

显然,ST,TI或Intel或任何制造芯片的人都不会错过这一机会。他们是对的。HAL是ST的回应,实际上不仅在业务或市场方面,而且在工程方面也很健全。声音的原因在于名称:

硬件抽象

如果还有其他问题,这是您应该记住的。HAL是远离硬件的一种努力。这是一项很好的工程设计,因为它使我们能够将功能与细节分离。分层是允许开发复杂程序的一种方法-一种在另一种之上的抽象,直到硬件。实际上,抽象是我们管理复杂性最强大的工具。我非常怀疑这个星球上的任何人都能够为特定的CPU组装Web浏览器。

文化上的转变确实很难消化,但是我不得不认为一个人不需要阅读Knuth的《计算机编程艺术》来开发Web应用程序,EE世界必须承认有一些新人可以(并且将要!)开发嵌入式代码。无需阅读《圣洁参考手册》。

好消息是,新玩家并不意味着老玩家的工作量会减少-相反,恕我直言。当事情“不起作用”时,他们将打电话给谁?如果您具有RTFM(与它们不同),并且知道此晦涩的配置寄存器的每一位的功能,那么您将具有优势。

在阅读和实验之间,只需使用HAL。新的MCU?没问题。新的MCU线?没问题,以及(我编码在STM32F4核蛋白测试在短短的一天CubeMX,然后简单地将它移植到我们的设备......只觉得)。模拟单元测试?没问题。清单之所以不断,是因为抽象是好的。

当然,HAL本身并非100%可以。它的文档太糟糕了(但是您有RT F HRM,不是吗?),有很多错误,ST只是向我们转储了beta版本(如今看来很标准),而他们的公众支持是个玩笑。但是不发布HAL将会更加糟糕。


我知道你来自哪里。据我了解,(不幸的是)事情以Arduino的方式发展,试图向程序员隐藏尽可能多的现实,以吸引更多的高级软件人员参与硬件编程,这就是HAL之类的库背后的原因。然而,看到它的文档记录多么糟糕,并且也一团糟,我认为他们不会在不久的将来成功做到这一点。
约翰

@John:HAL不会隐藏任何“现实”。一切都在那里,您可以进行调整。所有部分都是可选的-例如,您可能只想使用宏来访问寄存器,或者只想使用特定的驱动器(例如I2C)或包括ISR和时钟配置在内的所有内容。你的选择。但是,我同意文档很烂。(我已经告诉ST,他们保证将在BTW上工作)

我们正在重复使用新工具做同样的事情。因为新工具有望使工作变得更加轻松和快捷,因此具有成本效益。但是我们仍然在做相同的事情,因为无论2095年还是1995年,人类都一样。我们选择使用新工具还是继续使用我们已经熟悉的工具,这是我们的选择。
乔尼
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.