STM32f1学习笔记——GPIO

通用输入/输出GPIO

参考文章:“STM32自学笔记”
Stm32可以提供很多GPIO,一般分别在5个端口(PORT)(GPIOA-GPIOE),每个端口有16个GPIO,最大耐压值为5v。每个端口有32为宽带的设置寄存器,一共64位,每个GPIO占用4位配置位。其中两位设置GPIO的方向,另外两位设置GPIO的工作模式

GPIO中的常用参数

1、GPIO_Pin定义

GPIO_Pin参数 描述
GPIO_Pin_None 无引脚被选中
GPIO_Pin_0~15 选中引脚1~15(其中一个)
GPIO_Pin_All 选中全部引脚

2、GPIO_Mode定义

GPIO_Mode参数 描述
GPIO_Mode_AIN 模拟输入
GPIO_Mode_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出

3、GPIO_Speed定义

GPIO_Speed参数 描述
GPIO_Speed_2MHz 最高输出频率2MHz
GPIO_Speed_10MHz 最高输出频率10MHz
GPIO_Speed_50MHz 最高输出频率50MHz

关于参数的一些说明:

上下拉输入:即在将输入值在没有低/高平信号给到时,稳定在高/低平
模拟输入:用ADC时,将模拟信号送个MCU
浮空输入:一般用于I2C与UASRT的输入管脚
开漏输出:只能输出低电平
推挽输出:既可以输出高电平也可以输出低电平
GPIO_Speed:字面意思就是变换电平所需的时间;在GPIO设置成输入模式时,不需要设置翻转速度

GPIO函数说明

// GPIO 说明
/*设为默认状态*/
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
/*GPIO_Init(GPIO_TypeDef * GPIOx,GPIO_Type_InitTypeDef * GPIO_InitStruct)*/
GPIO_Init(GPIOA,&GPIO_InitStructure);  
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
{
  /*
  	说明:端口默认缺省为全选,2MHz,浮空输入
  */
  /* Reset GPIO init structure parameters values */
  GPIO_InitStruct->GPIO_Pin  = GPIO_Pin_All;
  GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
}

/*端口置位*/
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */
/*清楚端口数据,即置0*/
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

你可能感兴趣的:(STM32学习笔记,单片机,stm32)