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