STM32 GPIO中GPIOMode_TypeDef枚举变量的解析

GPIOMode_TypeDef是一个枚举变量,它用于存储GPIO工作的模式,它的定义如下:

typedefenum

{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;

设计这个枚举变量的可取值有一定的意义。在低四位当中只用到了其中的高两位,这两位数据用来存储到某一个引脚的配置模式 ,而高四位用来标志某一些标志(输入/输出/下拉输入/上拉输入模式)。

高四位的取值

意义

0

输入模式

1

输出模式

2

下拉输入

4

上拉输入

在GPIO枚举结构中 给出的结构体
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;
这里的只是一个标示,并不能代表它对寄存器是怎么设置的,你可以看下面他的库函数里怎么设置的,另外此处枚举还很好的区分输入输出,输出模式的第4位为1,可以通过此判断你的模式是输入还是输出。

/* Reset the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
{
GPIOx->BRR = (((u32)0x01) << pinpos);
}
else
{
/* Set the corresponding ODR bit */
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
{
GPIOx->BSRR = (((u32)0x01) << pinpos);
}
}
他会判断你配置的模式是什么,然后根据pinpos来设置对应的端口

STM32 GPIO中GPIOMode_TypeDef枚举变量的解析_第1张图片

你可能感兴趣的:(编程)