库开发与寄存器开发的关系
其实一句话就可以概括:固件库就是函数的,固件库函数的作用是向下负责与寄存器直接打道,向上提供用户函数调用的接口(API)。
在 51 的开发中常常的作法是直接操作寄存器,比如要控制某些 IO 口的状态,直接操作寄存器:
P0=0x11;而在 STM32 的开发中,同样可以操作寄存器:
GPIOC->BSRR=0x00000001; //这里是针对 STM32L4 系列这种方法当然可以,但是这种方法的劣势是需要去掌握每个寄存器的用法,才能正确使用 STM32,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法半导体)推出了官方固件库,固件库将这些寄存器底层操作 都封装起来,提供一整套接口(API)供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。
比如控制 BSRRL 寄存器实现电平控制,官方 HAL 库封装了一个函数:
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) { if(PinState != GPIO_PIN_RESET) { GPIOx->BSRR = GPIO_Pin; } else { GPIOx->BSRR = (uint32_t)GPIO_Pin << 16; } }这个时候你不需要再直接去操作BSRRL寄存器了 , 只需要知道怎么使用HAL_GPIO_WritePin 这个函数就可以了。
在对外设的工作原理 有一定的了解之后,再去看固件库函数,基本上函数名字能告诉你这个函数的能是什么,该怎么使用,这样会使得开发方便很多。
任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固件库不是万能的,您如果想要把 STM32 学透,光读 STM32 固件库是远远不够的。你还是要了解一下 STM32 的原理, 了解 STM32 各个外设的运行机制。只有了解了这些原理,你在进行固件库开发过程中才可能得心应手游刃有余。只有了解原理,才能做到“知其然知其所以然”,所以在学习库函数的同时,要了解一下寄存器大致配置过程。