STM32 GPIO

一、GPIO的输入模式

1、浮空输入_IN_FLOATING

输入信号经过施密特触发器接入输入数据存储器。当无信号输入时,电压不确定。因为浮空输入既高阻输入,可以认为输入端口阻抗无穷大,这样可以检测到微弱的信号。(相当于电压表测电压,如果电压表内阻不够大而外部阻抗比较大,则电压表分压会比较小)。此时输入高电平即高电平,输入低电平即低电平。但是外界没有输入时输入电平却容易受到外界电磁以及各种玄学干扰的影响。如按键采用浮空输入,则在按键按下时输入电平为低,但是当松开按键时输入端口悬空,外界有微弱的干扰都会被端口检测到。此时端口可能高,也可能低。

2、下拉输入_IPD

浮空输入在外界没有输入时状态不确定,可能对电路造成干扰。为了使得电路更加稳定,不出现没有输入时端口的输入数据被干扰 (比如手碰一下电压就发生变化)。这时就需要下拉电阻(或上拉电阻),此电阻与端口输入阻抗相比仍然较小。有输入信号时端口读取输入信号,无输入信号时端口电平被拉到低电平(高电平)。

3、上拉输入_IPU

上拉输入与下拉输入类似,只是无输入信号时端口电平被拉到高电平。例如按键信号,当按下时输入低电平,松开时电平被拉到高电平。这样就不会出现按键松开时端口电平不确定的情况。即不知道时按下还是松开。

4、模拟输入_AIN

输入信号不经施密特触发器直接接入,输入信号为模拟量而非数字量,其余输入方式输入数字量。

二、GPIO输出模式

1、开漏输出_OUT_OD 

开漏输出即漏极开路输出。这种输出方式指场效应管漏极开路输出。需要接上拉电阻才能输出1。漏极经上拉电阻接到电源,栅极输出0时,场效应管截止(阻抗无线大),电压被分到场效应管上,此时输出为1。当栅极输出1时,场效应管导通,输出端口相当于接地,此时输出0。开漏输出高电平时是由外接电源输出的,因此可以实现高于输出端口电压的输出。可以实现电平的转换。开漏输出可以实现线与功能,方法是多个输出共接一个上拉电阻。但是漏极开路输出上升沿慢,因为上升沿是外接电源对上拉电阻以及外接负载充电。当上拉电阻较大或者负载容性较大时时间常数较大,充电较慢。需要较快反映时可以采用下降沿触发,此时没有电阻接入,电路的时间常数较小,充电较快。

2、推挽输出_OUT_PP

GPIO的推挽输出模式是在开漏输出模式的基础上,在“输出控制电路”之后,增加了一个P-MOS管

当CPU输出逻辑“1 ”时,编号3 处的P-MOS管导通,而下方的N-MOS管截止,达到输出高电平的目的

当CPU输出逻辑“0 ”时,编号3 处的P-MOS管截止,而下方的N-MOS管导通,达到输出低电平的目的

在这个模式下,CPU 仍然可以从“输入数据寄存器”读到该IO端口电压变化的信号
3、开漏复用输出_AF_OD 

可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用功能输出模式(推挽或开漏)

4、推挽式复用输出_AF_PP

可以理解为GPIO口被用作第二功能时的配置情况

三、GPIO的配置方法

1 定义GPIO引脚的结构体变量

GPIO_InitTypeDef GPIO_InitStructure;

2 配置引脚的速度

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

3 初始化结构体的变量

(1)引脚

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

(2)速度

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

(3)模式

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

 4、初始化对应的端口

 GPIO_Init(GPIOC, &GPIO_InitStructure);
 GPIO_Init(GPIOE, &GPIO_InitStructure);

工作模式

typedef enum

    //四种输入
    GPIO_Mode_AIN            = 0x00,                    //模拟输入
    GPIO_Mode_IN_FLOATING     = 0x04,                    //浮空输入
    GPIO_Mode_IPD             = 0x28,                    //下拉输入
    GPIO_Mode_IPU             = 0x48,                    //上拉输入
    //四种输出
    GPIO_Mode_Out_OD         = 0x14,                    //开漏输出
    GPIO_Mode_Out_PP         = 0x10,                    //推挽输出
    GPIO_Mode_AF_OD         = 0x1C,                    //复用开漏输出
    GPIO_Mode_AF_PP            = 0x18,                    //复用推挽输出
}GPIOMode_TypeDef;

(1) 作为普通GPIO输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。
(2) 作为普通GPIO输出:
根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。
(3) 作为普通模拟输入:
配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。(A/D模拟输入)
(4) 作为内置外设的输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。
(5)作为内置外设的输出:
根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值