(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode__OUT_OD 开漏输出
(6)GPIO_Mode_OUT_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出
转:STM32中GPIO的8种工作模式
1、 GPIO_Speed_10M最高输出速率10MHz
GPIO_Speed_2M最高输出速率2MHz
GPIO_Speed_50M最高输出速率50MHz
2、 输出速率是指I/O驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O的输出部分设计了多个响应速度不同的驱动电路,可根据需要自行选择)。通过选择速度来选择不同的输出驱动模块,达到最佳噪声控制与降低功耗的目的。高频的驱动电路,噪声也高当不需要高的输出频率时,选择低频驱动电路,有利于提高系统的EMI性能。当然如果需要输出高频信号,却选择了较低频率的驱动模块,很有可能会得到失真的输出信号。
3、 GPIO引脚速度与应用匹配举例:
(1)串口:波特率为115.2k,那么用2M的引脚速度就够了,省电噪声小。
(2)I2C:波特率为400k,则选用10M的GPIO引脚速度。
(3)SPI:波特率为18M或19M,则需选择50M的GPIO引脚速度。
4、 GPIO口作为输入时,输出驱动电路与端口是断开的,所以配置输出速度无意义。
5、 所有端口都有外部中断能力。为了使用外部中断线端口需配置成输入模式。
6、 GPIO口具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片才能解锁。
7、上电瞬间或者复位期间I/O口的电平状态默认是浮空输入(高阻低功耗)。
推荐例程:跑马灯&按键输入
跑马灯GPIO配置:
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //开启时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速率50M
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
}
按键输入GPIO配置(上拉下拉也与外部电路相关):
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入up
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉输入down
GPIO_Init(GPIOA, &GPIO_InitStructure);
}