我最近买了一个STM32 NUCLEO Dev Kit,想知道这是不是一个真正的嵌入式系统工程师在开发产品时会在行业中使用的东西?
我正在使用基尔uVision5,STMCubeMX和STM32 ST-LINK Utility来开发某些项目。由于我习惯于使用PIC和使用PORTA、OSCCON、TIMER0等寄存器,我看到基尔uVision5使用现成的函数,如HAL_GPIO_TogglePin(.........)等等。这是他们在工业中通常的做法,还是更直接地与寄存器一起工作?
发布于 2019-05-13 03:27:09
它在很大程度上是基于观点的,如果这个问题因为这个原因而被关闭,我不会感到惊讶。这个答案只涉及你所问的几个方面。这是一个非常广泛的话题,很难--如果不是不可能的话--在一篇不会长达几页的帖子中包含所有内容。然而,为了给你提供我对这个话题的看法,同时试图保持公正,简短的答案是..那得看情况。
如果您想知道在最常见的情况下使用的是什么,很可能是您提到的HAL (以前称为StdPeriph)函数。原因是-在大多数常见的情况下,他们都能完成工作。毕竟,它总是归结于创建一个产品的成本。如果HAL函数对于这个目的来说“足够好”,那么它们就会被使用,因为它们的开发速度更快。开发成本越高,您就越想削减它(或将其转移到其他地方),而使用抽象就是这样做的一种方式。
然而,尽管我认为可以安全地假设通常使用HAL / Std Periph /任何其他(包括专有)抽象层,但情况并不总是这样,至少有两个原因我能想到:
现在到我的回答中更偏颇的部分..我明白你为什么要问这个问题了。来自PIC世界,在那里Flash或CPU时钟更珍贵,在那里直接使用寄存器是有意义的。在STM32的情况下,它不再那么关键。话虽如此,你有时会偶然发现“使用寄存器是唯一正确的方法”的观点,但就我个人而言,我发现这样的讨论最终纯粹是学术上的。我认为寄存器或构建在寄存器之上的任何抽象都是工具,您应该为正确的工作使用正确的工具。没有使用正确工具的两个例子:
所以,毕竟,如果我想说的是,你应该在个案的基础上使用适合这项工作的东西。对于STM32,你现在有3个选择: HAL (顶层抽象层),HAL (低级抽象-通常是简单的寄存器访问的包装函数)或者直接使用寄存器。你选择哪一个应该取决于你的需求。
发布于 2019-05-13 20:37:37
我一直在使用Nucleo主板。它允许我在准备好实际的硬件之前就开始编写软件。
HAL & register方式与其说是“行业标准”,不如说是程序员的选择。我个人在编写USB和以太网等更复杂的外围设备时使用HAL驱动程序,以避免从头开始布线整个堆栈。
发布于 2019-05-14 18:30:35
我刚刚完成了我的学位,我们大量使用了STM32平台和CMSIS和HAL。
这是一个偏好的问题。HAL库提供了更高的抽象,但带有一些不太直观的怪癖。HAL (was/)有时是错误的。我们遇到过SPI传输错误,由于每字节传输的延迟,导致SPI的较高传输速率无法使用。
CMSIS提供较低级别的访问,但仍然抽象出简单的位操作。我不认为直接寄存器访问是一种很好的编程方式,至少应该使用CMSIS。但这仍然是一个观点、偏好和对手头工作的正确选择的问题。如果你需要速战速决:哈尔。如果你真的需要很好的控制: CMSIS。
(顺便提一下,我认为CMSIS已经被淘汰,转而支持HAL,但目前它仍然可以使用)
https://stackoverflow.com/questions/56102152
复制相似问题