STM32 GPIO
1.GPIO8种状态
输入:
浮空输入
上拉输入
下拉输入
模拟输入
输出:
开漏输出
推挽输出
复用开漏输出
复用推挽输出
浮空输入:引脚状态由已经连接的外部外设决定,呈高阻态,一般实际运用时,引脚不建议悬空,易受干扰。
上拉输入:内部上拉到高电平,将不确定的信号通过一个电阻嵌位在高电平。
下拉输入:内部下拉到GND,将不确定的信号通过一个电阻嵌位在GND。
模拟输入:接受到的是模拟输入,一般用于AD转换。
开漏输出:无法直接输出高电平,需要外接一个上拉电阻才行。输出的电压由上拉电阻连接的电源决定。
推挽输出:可以输出高低电平,连接数字器件。在stm32推挽电路由两个MOS管组成,输出高电平时,P-MOS导通,引脚联通vdd(3.3v),输出低电平时,N-MOS导通,引脚联通GND。
2.GPIO速度
GPIO 引脚速度: GPIO_Speed_2MHz , GPIO_Speed_10MHz, GPIO_Speed_50MHz
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
GPIO速度又称输出驱动电路的响应速度,可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。
GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。
比如:
① USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小。
② I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度。
③ SPI接口,若使用18M或9M波特率,需要选用50M的GPIO的引脚速度。
3.GPIO配置
以小灯为例
GPIO_InitTypeDef GPIO_InitStructure;//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //开启对应引脚时钟
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; //IO口速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5输出高电平