一般的GPIO有8种输入输出模式,其中有4种输入,4种输出,在开发中基本上在初始化GPIO口的时候需要用到,对应的参数名为GPIO_Mode
。首先贴上GPIO接口电路图:
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. GOIO_MODE_AF_PP 复用推挽输出
F4系列
在F4系列中,GPIO模式在代码实现上有点区别,在以上介绍的8种GPIO模式中,实际上包含了输入输出模式和类型。F4系列将二者进行了拆分,GPIO_Mode
参数只指定输入输出模式,而增加了GPIO_OType
参数指定对应的类型,例如:
// F1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0
// F4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0
评论(0)