1.GPIO的八种工作模式
GPIO共有八种工作模式,四种输出模式,四种输入模式
四种输出模式包括:通用推挽输出、通用开漏输出、复用推挽输出、复用开漏输出
四种输入模式:上拉输入、下拉输入、浮空输入、模拟输入
先讲四种输出模式:
推挽输出 (PUSH-PULL ):构成是上面一个P-mos,下面一个N-mos。当输入为高电平时,上管P-mos导通,输出高电平;当输入为低电平时,下管N-mos导通,输出低电平。两个MOS是交替导通的,不会同时导通(同时导通相当于VCC直连GND,会烧坏IO口)。
开漏输出(Open-Drain):所谓开漏输出,即相当于漏极断开,此时上方的Pmos相当于一直关闭状态。当输入电平为高时,N-mos保持关闭状态,输出高阻状态;输入为低时,下管N-mos导通,输出低电平。所以,开漏输出是不能直接输出高电平的,使用开漏输出一般要加上拉电阻使其能输出高电平。
注意:在输入信号到上下两个MOS管之前,前面有个反相电路,这也就解释了为何输入为1时是上管P-mos导通下管N-mos关闭了。
通用和复用的区别:通用一般是指CPU直接发出脉冲信号控制IO口的电平,复用则是CPU通过控制片上外设,然后片上外设再控制IO口。
GPIO的基本介绍基本就这些,然后看下它是如何工作的:
GPIO工作前要进行初始化操作,所谓初始化你也可以理解为配置GPIO工作的参数。
1.开始GPIO的时钟,命令RCC_APB2PeriphClockCmd();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO使能
2.GPIO管脚的初始化,GPIO_Init();以PA13为例,PA13控制点亮一颗LED,开漏输出模式,频率2MHz,
GPIO输出模式下有三个参数:
GPIO_Mode:选择GPIO的工作模式,推挽/开漏/上拉/下拉等状态
GPIO_Pin:GPIO的管脚
GPIO_Speed:GPIO的最大输出速率,有2MHz,10MHz,50MHz可选
所谓GPIO最大工作速率是指GPIO连续输出0/1保持波形不失真的最大速度,与上升时间和下降时间有关,工作速度并不是越大越好,高工作速度将会产生更高的功耗以及对外产生更多的EMI辐射。
GPIO的初始化我们一般定义一个结构体,命令GPIO_InitTypeDef 结构体名称为GPIO_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT_OD;//开漏输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;//PA13
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//工作速度
GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化完成
GPIO输出模式下初始化完整代码截图如下:
以上介绍的是输出工作模式下,输入工作模式基本类似,参数没有GPIO_Speed,速度只是相对于输出而言的。