第8章.STM32开发方式(库函数)介绍

发布于:2024-05-10 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

0. 《STM32单片机自学教程》专栏

8.1 单片机的开发方式        

8.1.1 直接操作寄存器

8.1.2 使用库函数

8.2 STM32的库函数

8.2.1 标准外设库(STD库)

8.2.2 HAL库 

8.2.3 LL库 


0. 《STM32单片机自学教程》专栏

        本文作为专栏《STM32单片机自学教程》专栏其中的一部分,返回专栏总纲,阅读所有文章,点击Link:  

STM32单片机自学教程-[目录总纲]_stm32 学习-CSDN博客

8.1 单片机的开发方式        

图8.1-1 单片机开发方式 

        如图8.1-1,单片机开发常见的开发方式有两种:直接操作寄存器和使用库函数。我们在51单片机开发的时候就直接配置寄存器,但是到了32位单片机开发,如果开发大型项目,需要的功能外设很多,再使用这种方式就已经力不从心了。因为 STM32 的外设资源丰富,寄存器数量是51单片机寄存器的数十倍,那么多的寄存器根本无法记忆,而且开发中需要不停查找芯片手册,开发过程就显得机械和费力,完成的程序代码可读性差,可移植性不高,程序的维护成本变高了。当然了,采用直接配置寄存器方式开发会显得更直观,程序运行占用资源少。 下面将这两种方式的优缺点总结一下:

 图8.1-2 两种开发方式的优缺点 

8.1.1 直接操作寄存器

优点:

  1. 性能高:直接操作寄存器可以绕过库函数的调用和转换,直接对硬件进行操作,因此执行效率更高。
  2. 灵活性高:直接操作寄存器可以实现对硬件的底层控制,能够灵活地根据具体需求进行配置和操作。
  3. 深入理解硬件:通过直接操作寄存器,可以更深入地理解硬件的工作原理和内部机制,有助于提升个人的开发能力和经验。

缺点:

  1. 学习成本高:直接操作寄存器需要对硬件的底层结构和工作原理有较深的理解,对于初学者来说学习成本较高。
  2. 开发效率低:直接操作寄存器需要编写大量的底层代码,包括寄存器的配置、读写等,这会增加开发的工作量,降低开发效率。
  3. 可移植性差:直接操作寄存器是针对特定硬件的,当更换硬件或平台时,需要重写大量的底层代码,可移植性较差。

8.1.2 使用库函数

优点:

  1. 易于学习和使用:库函数提供了对硬件操作的封装,使得开发者无需深入了解硬件的底层细节,即可进行开发。这降低了学习成本,提高了开发效率。
  2. 可移植性好:库函数通常是跨平台的,可以在不同的硬件和操作系统上运行。因此,使用库函数开发的程序具有较好的可移植性。
  3. 较好的兼容性:库函数经过了严格的测试和验证,通常具有较好的兼容性和稳定性。

缺点:

  1. 性能较低:由于库函数需要进行封装和调用,相对于直接操作寄存器来说,执行效率可能会稍低一些。但在大多数情况下,这种性能差异是可以接受的。
  2. 灵活性受限:使用库函数进行开发时,可能会受到库函数功能的限制。如果库函数没有提供所需的功能,或者功能不满足具体需求,那么就需要进行底层开发或寻找其他解决方案。
  3. 依赖性强:使用库函数开发的程序通常依赖于特定的库文件或环境。如果更换库文件或环境,可能会导致程序无法正常运行或需要重新编译。因此,在使用库函数进行开发时,需要注意库文件的版本和兼容性等问题。

         目前现在大型项目开发里,肯定是推荐库函数方式。现在项目开发最重要的是“方便人”,方便产品的合作开发,而不再是“方便计算机”,封装越好越利于项目的开发,虽然封装越好运行速度越慢,但目前这个缺点可以忽略。我们平常开发时,有同事经常会说,计算机你就把它当成“一头驴”,不要管它累不累,我们自己不累才是现代项目该有的特征。

        虽然直接操作寄存器这种方式可以使我们更深入地理解硬件的工作原理和内部机制,有助于提升个人的开发能力,但STM32的学习过程却完全没必要按直接操作寄存器的方式去学习或者开发,我们只需要明白原理即可,了解了一种寄存器,其余寄存器操作方式也都是一样的。我们没必要在这上面耗费青春。

8.2 STM32的库函数

图8.2-1 STM32的库函数 

        为了简化开发人员的工作,减少开发工作时间和成本,针对STM32系列芯片,ST公司推出了标准外设库(STD库)、HAL库和LL库。在这些库中,有很多用结构体封装好的寄存器参数,有常用的表示参数的宏,还有封装好的对寄存器操作的API,开发者可以调用这些资源实现配置相应的寄存器,效率大大提高了。使用库的框架来开发,程序控制语句结构化,程序单元模块化,贴近人的思维,易于阅读,易于移植和维护。下面介绍一下3种库函数的区别。

图8.2-2 STM32各产品的库函数支持情况 

8.2.1 标准外设库(STD库)

        STD(StandardPeripheralLibraries)标准外设库,它把实现功能中需要配置的寄存器以结构体的形式封装起来,使用者只需要配置结构体变量成员就可以修改外设的配置寄存器,比直接操作寄存器方便了不少。但标准外设库仍然接近于寄存器操作,它的方便也是针对某一系列芯片而言,在不同系列芯片上使用标准外设库开发的程序可移植性比较差,例如,在F4上开发的程序移植到F3上,使用标准库是不通用的。目前STM32系列产品中仅F0-F4以及L1系列支持标准外设库。目前,对于较新的STM32系列,如STM32F7、STM32L4等,ST公司已经停止提供STD库的支持。这些新系列的MCU产品主要使用HAL库和LL库进行开发。

8.2.2 HAL库 

        为了解决标准库存在的问题,ST公司在标准库的基础上又推出了 HAL 库。这几年ST公司大力推广HAL 库,而且在ST新出的STM32 芯片中, ST直接只提供 HAL 库。HAL库取代之前的标准库已经是确定的趋势,HAL库也更符合现代项目的开发方式。
        HAL库在设计的时候更注重软硬件分离,HAL库的目的就是尽量抽离物理层,HAL库的API集中关注各个外设的公共函数功能,以便定义通用性更好的API函数接口,具有更好的可移植性。HAL库写的代码在不同的STM32产品上移植,非常方便,效率得到提升。目前HAL库支持STM32全系列微控制器,具有良好的跨平台支持。

8.2.3 LL库 

  • LL库(Low-Level Library)是STMicroelectronics在HAL库的基础上提供的更低级别的库。
  • 它提供了对底层寄存器和外设的更直接的访问,允许开发者编写更底层的代码,实现对微控制器和外设的精细控制。
  • LL库保留了更多的硬件细节,为开发人员提供了更高级别的灵活性和控制。
  • 相对于HAL库,LL库的执行效率可能更高,但使用难度也相应增加。
  • LL库适用于对性能和资源要求极高,以及对底层硬件控制有特殊需求的应用。 

        LL库是ST在HAL库的基础上提供的更低级别的库,是继HAL库之后新增的库,与HAL库捆绑发布。LL库也更接近硬件层,它和STD库类似,都是直接操作的寄存器,只不过LL库可以在STM32Cube中实现。LL库提供一组轻量级、优化、面向专家的API,具有最佳的性能和运行时效率。LL库可以完全独立使用,也可以结合HAL库一起使用。当HAL库需要优化运行时,可以调用LL库来处理,例如对于一些复杂的外设(如USB驱动),两者混合使用才能正常驱动这个复杂的外设。 

        我们本教程的目的是学习,为了对硬件和原理有更深入的理解,很明显采用STD库是更好的一种学习方式。我们的学习也基于标准库开展。 

参考资料:
        【1】哔站江协科技STM32入门教程

        【2】《STM32单片机原理与项目实战》刘龙、高照玲、田华著

        【3】《ARM Cortex-M3嵌入式原理及应用》黄可亚著

        【4】《STM32嵌入式微控制器快速上手》陈志旺著

        【5】《STM32单片机应用与全案例实践》沈红卫等著

        【6】《野火STM32开发指南》

        【7】《正点原子STM32开发指南》


网站公告

今日签到

点亮在社区的每一天
去签到