输入:
浮空输入:I/O口无输入时不确定
上拉输入:I/O无输入时输入高电平
注:上拉电阻的电源电压小于等于单片机的电源电压
下拉输入:I/O无输入时输入低电平
模拟输入:I/O模拟信号直接输入
输出:
开漏输出:控制输出低电平时引脚接地;控制输出高电平时,若上拉,输出上拉电阻的电源电压,若下拉,输出低电平
推挽输出:当IO口为低电平时接地,IO口为高电平时直接输出STM32电源电压,这种方式可以不接上拉电阻。
复用推挽表示引脚的io的操作由相应的功能模块来完成,普通推挽表示你需要通过gpio寄存器来操作
GPIO模式:
typedef enum
{
GPIO_Mode_IN = 0x00, /*!输入模式 */
GPIO_Mode_OUT = 0x01, /*!输出模式 */
GPIO_Mode_AF = 0x02, /*复用模式 */
GPIO_Mode_AN = 0x03 /*!模拟模式 */
}GPIOMode_TypeDef;
输出模式:(输入模式配置毫无意义)
typedef enum
{
GPIO_OType_PP = 0x00, //推挽模式
GPIO_OType_OD = 0x01 //开漏模式
}GPIOOType_TypeDef;
输出速度:(输入模式配置毫无意义)
typedef enum
{
GPIO_Low_Speed = 0x00, /*!< Low speed */
GPIO_Medium_Speed = 0x01, /*!< Medium speed */
GPIO_Fast_Speed = 0x02, /*!< Fast speed */
GPIO_High_Speed = 0x03 /*!< High speed */
}GPIOSpeed_TypeDef;
/* Add legacy definition */
#define GPIO_Speed_2MHz GPIO_Low_Speed
#define GPIO_Speed_25MHz GPIO_Medium_Speed
#define GPIO_Speed_50MHz GPIO_Fast_Speed
#define GPIO_Speed_100MHz GPIO_High_Speed
输入上下拉:(推挽&&输出模式配置无意义)
typedef enum
{
GPIO_PuPd_NOPULL = 0x00, //浮空
GPIO_PuPd_UP = 0x01, //上拉
GPIO_PuPd_DOWN = 0x02 //下拉
}GPIOPuPd_TypeDef;
整体配置(小灯例子):
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟
//GPIOF9,F10初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//上拉 推挽输出意义不大
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化