寄存器
寄存器编程是直接对芯片的寄存器操作(无论是标准库还是hal库,最终操作的还是寄存器),相对库函数来说,整个程序更加高效,在需要大量处理数据的时候,寄存器能比库函数相对快的处理速度完成。
特点:
寄存器众多,需要经常翻阅芯片手册,费时费力
更大灵活性,可以随心所欲达到自己的目的
深入理解单片机的运行原理,知其然更知其所以然
标准库(STD)
标准库是ST提供的最基本的库。它提供了对STM32微控制器的底层寄存器和外设的直接访问。标准库的设计目标是提供高度灵活性和低层次的硬件控制,以满足对性能和资源的严格要求。使用标准库,开发人员可以直接操作寄存器来配置和控制微控制器的功能,但需要手动编写大量的底层代码。标准库适用于对性能要求较高的应用和对代码大小和效率有严格要求的项目。
特点:
将寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用
配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能
大大降低单片机开发难度,但是在不同芯片间不方便移植
HAL库
hal库是ST公司针对STM32单片机推出的全新开发库,旨在取代原来用于开发STM32的标准库。相比于原来的标准库,hal库开发提供了图形化配置界面,使得外设初始化变得更加简单明了且不容易出错。只需要在图形界面输入参数,就可以自动生成工程。并且hal库提供了更高抽象层次的API,因此可移植性更强,便于在基于M3,M4,M7内核的单片机之间移植。HAL库比标准库有更好的前景,因为ST公司不再维护标准库,而且现在STM32很多mcu只支持使用HAL库开发不支持使用标准库开发。
特点:
ST公司目前主力推的开发方式,新的芯片已经不再提供标准库
实现在不同芯片之间移植代码
兼容所有芯片,导致代码量庞大,执行效率低下
LL库
LL库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器,LL库代码较少,只实现了非常简单的功能,基本上只有一些初始化的代码,其它的功能需要用户自己去实现
特点:
适用于对性能要求高的应用场景
LL库的代码较少,占用内存较少,速度较快
LL库需要开发者直接操作寄存器,编程难度较大