操作寄存器CRH和CRL 固件库初始化GPIO的方法
2019-09-28 13:33:57    4    0    0
yang

在固件库开发中,操作寄存器 CRH CRL 来配置 IO 口的模式和速度是通过 GPIO 初始化
函数完成:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);​


这个函数有两个参数,第一个参数是用来指定
GPIO,取值范围为 GPIOA~GPIOG
第二个参数为初始化参数结构体指针,结构体类型为
GPIO_InitTypeDef。下面我们看看这个结
构体的定义。首先我们打开我们光盘的跑马灯实验,然后找到
FWLib 组下面的 stm32f10x_gpio.c
文件,定位到 GPIO_Init 函数体处,双击入口参数类型 GPIO_InitTypeDef 后右键选择“Go to
definition of
…” 可以查看结构体的定义:

typedef struct
{ uint16_t GPIO_Pin;            //表示操作的端口号
GPIOSpeed_TypeDef GPIO_Speed;   //表示设置的端口速度
GPIOMode_TypeDef GPIO_Mode;     //表示设置的端口模式(八种)
}GPIO_InitTypeDef;​


下面我们通过一个 GPIO 初始化实例来讲解这个结构体的成员变量的含义。
通过初始化结构体初始化
GPIO 的常用格式是:

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;          //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //速度 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);             //根据设定参数配置 GPIO​


上面代码的意思是设置 GPIOB 的第 5 个端口为推挽输出模式,同时速度为 50M。从上面初始
化代码可以看出,结构体
GPIO_InitStructure 的第一个成员变量 GPIO_Pin 用来设置是要初始化
哪个或者哪些
IO 口;第二个成员变量 GPIO_Mode 是用来设置对应 IO 端口的输出输入模式,
这些模式是上面我们讲解的
8 个模式,在 MDK 中是通过一个枚举类型定义的:

typedef enum
{ GPIO_Mode_AIN = 0x0,              //模拟输入
GPIO_Mode_IN_FLOATING = 0x04,       //浮空输入
GPIO_Mode_IPD = 0x28,               //下拉输入
GPIO_Mode_IPU = 0x48,               //上拉输入
GPIO_Mode_Out_OD = 0x14,            //开漏输出
GPIO_Mode_Out_PP = 0x10,            //通用推挽输出
GPIO_Mode_AF_OD = 0x1C,             //复用开漏输出
GPIO_Mode_AF_PP = 0x18              //复用推挽
}GPIOMode_TypeDef;​


第三个参数是 IO 口速度设置,有三个可选值,在 MDK 中同样是通过枚举类型定义:

typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;​


Pre: IDR寄存器(端口输入寄存器)使用方法

Next: ODR寄存器(端口输出数据寄存器)

4
Table of content