GPIO支持4种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和4种输出模式(开漏输出、开漏复用输出、推挽输出、推挽复用输出)。同时,GPIO还支持三种最大翻转速度(2MHz、10MHz、50MHz)。
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
初始化GPIO
GPIO_InitTypeDef GPIO_Structure;//新建结构体
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);//开启时钟
GPIO_Structure.GPIO_Pin=GPIO_Pin_13;//设置引脚
GPIO_Structure.GPIO_Speed=GPIO_Speed_50MHz;//初始化速度
GPIO_Structure.GPIO_Mode=GPIO_Mode_Out_PP;//输出输入方式
GPIO_Init(GPIOC,&GPIO_Structure);//使能GPIO
其中 引脚选择A-G
速度选择2/10/50
输入输出方式选择以下八种
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
模拟输入:模拟输出走的这一条路径,是我们需要对一个模拟信号进行读取。
GPIO_Structure.GPIO_Mode=GPIO_Mode_AIN;
浮空输入:浮空输出走的这一条路径,是对一个数字信号的读取。
GPIO_Structure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
上拉输入:上拉输出走的这一条路径,是对一个数字信号的读取。 上拉输入的好处就是输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在高电平。
GPIO_Structure.GPIO_Mode=GPIO_Mode_IPU;
下拉输入:下拉输出走的这一条路径,是对一个数字信号的读取。
下拉输入的好处就是输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在低电平。
GPIO_Structure.GPIO_Mode=GPIO_Mode_IPU;
浮空输入:浮空输出走的这一条路径,是对一个数字信号的读取。这一种输入模式的电平会完全取决于外部电路而与内部电路无关。有时候会用作对开关按键的读取。
GPIO_Structure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
输出方式:
GPIO_Structure.GPIO_Mode=GPIO_Mode_Out_OP;
开漏输出:当我们给一个低电平的时候,MOS管关闭,此时输出的电压就是一个浮空,即不确定的电压。如果给一个高电平,那么MOS管导通,相当于IO口与VSS相连,此处就输出了一个低电平电压。
复用开漏输出:复用推挽和复用开漏其实很简单,在你理解了开漏和推挽的原理之后,如果你不想用单片机内部来输出,那么你可以进行复用,将输出转移到其他外设上面
GPIO_Structure.GPIO_Mode=GPIO_Mode_AF_OP;
推挽输出:推挽输出就是可以需要利用两个不同的MOS管来实现输出。
P-MOS和N-MOS是不同的控制方式,当给一个高电平的时候,N-MOS导通,P-MOS不导通,此时IO口接通在VSS,此时输出的是低电平。当给一个低电平的时候,P-MOS导通,N-MOS导通,此时IO口接通在VDD电源上面,此时输出的是高电平。
带载能力强。
GPIO_Structure.GPIO_Mode=GPIO_Mode_Out_PP;
复用推挽输出:
GPIO_Structure.GPIO_Mode=GPIO_Mode_AF_PP;