STM32-基础知识?

1.固件库就是函数的集合

固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。

1.1举例

在 51 的开发中我们常常的作法是直接操作寄存器,比如要控制某些 IO 口的状态,我们直
接操作寄存器:

P0=0x11;

而在 STM32 的开发中,我们同样可以操作寄存器:

GPIOx->BRR = 0x0011;
这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用

STM32,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法
半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)
供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些
函数即可。
比如上面的控制 BRR 寄存器实现电平控制,官方库封装了一个函数:

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->BRR = GPIO_Pin;
}

这个时候你不需要再直接去操作 BRR 寄存器了,你只需要知道怎么使用 GPIO_ResetBits()这个
函数就可以了。 在你对外设的工作原理有一定的了解之后,你再去看固件库函数,基本上函数
名字能告诉你这个函数的功能是什么,该怎么使用, 这样是不是开发会方便很多?
任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固
件库不是万能的,您如果想要把 STM32 学透,光读 STM32 固件库是远远不够的。你还是要了
解一下 STM32 的原理,而这些原理了解了,你在进行固件库开发过程中才可能得心应手游刃
有余.

2.CMSIS 标准(Cortex Microcontroller Software Interface Standard)

翻译过来是
“ARM Cortex™ 微控制器软件接口标准”。 ST 官方库就是根据这套标准设计的。
STM32-基础知识?_初始化
STM32-基础知识?_初始化_02
CMSIS 分为 3 个基本功能层:

  1. 核内外设访问层: ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。
  2. 中间件访问层:定义访问中间件的通用 API,也是 ARM 公司提供。
  3. 外设访问层:定义硬件寄存器的地址以及外设的访问函数。
    从图中可以看出, CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交
    道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公
    司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库
    函数必须按照 CMSIS 这套规范来设计。
    其实不用这么讲这么复杂的,一个简单的例子,我们在使用 STM32 芯片的时候首先要进
    行系统初始化, CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公
    司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。 CMSIS 还对各个外设驱
    动文件的文件名字规范化,以及函数名字规范化等等一系列规定。上一节讲的函数
    GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。
    至于 CMSIS 的具体内容就不必多讲了,需要了解详细的朋友可以到网上搜索资料,相
    关资料可谓满天飞。

3.程序加载顺序

1、堆栈(SP) 的初始化;
2、 初始化程序计数器(PC);
3、 设置向量表异常事件的入口地址;
4、 调用 main 函数。