献给新手:解析 STM32 的库函数
意法半导体在推出 STM32 微控制器之初,也同时提供了一套完整细致的固
件开发包,里面包含了在 STM32 开发过程中所涉及到的所有底层操作。通过在
程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操
作中解放出来,将精力专注应用程序的开发上,这便是 ST 推出这样一个开发包
的初衷。
但这对于许多从 51/AVR 这类单片机的开发转到 STM32 平台的开发人员来
说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首
先去熟悉 STM32 所提供的固件库。那是否一定要使用固件库呢?当然不是。但
STM32 微控制器的寄存器规模可不是常见的 8 位单片机可以比拟,若自己细细
琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的维护,升
级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑
使用库函数进行 STM32 的产品开发是更好的选择。本文将通过一个简单的例子
对 STM32 的库函数做一个简单的剖析。
以最常用的 GPIO 设备的初始化函数为例,如下程序段一:
GPIO_InitTypeDef GPIO_InitStructure;
1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
2
GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_50MHz; 3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
4
GPIO_Init(GPIOA , &GPIO_InitStructure);
5
这是一个在 STM32 的程序开发中经常使用到的 GPIO 初始化程序段,其功能是
将 GPIOA.4 口初始化为推挽输出状态,并最大翻转速率为 50MHz。下面逐一分
解:
z 首先是 1,该语句显然定义了一个 GPIO_InitTypeDef 类型的变量,名为 GPIO_InitStructure,
则找出 GPIO_InitTypeDef 的原型位于“stm32f10x_gpio.h”文件,原型如下:
typedef struct
{
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;