【STM32】GPIO回顾

GPIO工作模式

输入

注意:输入模式没有推挽或开漏和速度设置。

模拟输入:GPIO_Mode_AN 外界模拟量,不加干涉(GPIO无效即使配置上下拉也无效),采集信息(电平信号1,0连续变化),模数转换(引脚直接接入内部ADC)。

上拉输入:GPIO_PuPd_UP 悬空无输入信号时,默认为高电平。有输入信号时,输入高为高电平,输入低为低电平。

下拉输入:GPIO_PuPd_DOWN 悬空无输入信号时,默认为低电平。有输入信号时,输入高为高电平,输入低为低电平。

浮空输入:GPIO_PuPd_NOPULL既不上拉又不下拉,由输入电平信号决定,可能受环境影响(环境,灰尘,电磁,静电)导致电平信号忽高忽低(用得少,有弊端)

输出

推挽模式:GPIO_OType_PP增大输出电流,高电平P-MOS导通,N-MOS断开。低电平N-MOS导通,P-MOS断开。(带上拉或者下拉)

开漏模式:GPIO_OType_OD高电平没有驱动力,需要外部上拉电阻才能真的输出高电平。(带上拉或者下拉)

这一特性一个明显的优势就是可以很方便的调节输出的电平,因为输出电平完全由上拉电阻连接的电源电平决定。所以在需要进行电平转换的地方,非常适合使用开漏输出。

开漏输出的另一特性好处在于可以实现"线与"功能,所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。而推挽输出就不行

开漏输出常用在通信接口,有多个设备连接在同一线上(例如 I2C、One-Wire)。线路默认被上拉电阻拉至高电平,当任意设备有信号触发时,就会将整条线电平拉低。

开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。

复用推挽:GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)

复用开漏:GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)

如果四种模式则为:输入、输出、复用、模拟。

在这里插入图片描述

每个引脚内部都有上拉电阻和下拉电阻,但是上拉电阻是一个弱上拉(驱动能力较弱),如果想要提供给引脚一个确定的电平,建议外接上拉电阻。

在这里插入图片描述

在这里插入图片描述

		PMOS管和NMOS管循环依次导通,好处是可以提高电路的负载能力和切换速度,并且可以降低功耗。
//stm32给予的部分权利截取自stm32f4xx_gpio.h
//uint8_t  无符号整型八位
 
//读取 输入 数据 哪一位
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//读取 输入 数据 所有
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
//读取 输出 数据 哪一位
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//读取 输出 数据 所有
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
//使能,电信号1
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//失能,电信号0
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//翻转(翻转高低电平信号)
void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

STM32F407ZGT6有8组I/O。分别为GPIOA ~ GPIOH,除了GPIOH只有两个I/O,其余每组I/O有16(0~15)根引脚。

下图中干扰项会对配置产生影响吗?

答:不影响,前面配置中已经有了稳定的输出源

void LED_Init()
{
	GPIO_InitTypeDef  GPIO_InitStructure;                     //结构体初始化
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);     //开启时钟
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;   //led引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;             //输出
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;            //推挽
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //速度(不考虑功耗选最大)
 
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //干扰项           
	
	GPIO_Init(GPIOF, &GPIO_InitStructure);                   //初始化
	
	GPIO_SetBits(GPIOF,GPIO_Pin_9);                          //默认关(原理图中使能)
	GPIO_SetBits(GPIOF,GPIO_Pin_10);                         //默认关
}
  1. 引脚的说明在这里插入图片描述
    电源引脚 :VCC、VDD、VSS、VDDA、VSSA、VREF+等属于电源引脚
    晶振引脚 :PC14、PC15、PH0、PH1就属于晶振引脚,也可以作为其他的功能使用
    复位引脚 :NRST属于复位引脚
    BOOT引脚 :BOOT0是专用引脚,BOOT1就属于功能引脚 (设置芯片的自举模式)
    GPIO引脚 :芯片一共有144引脚,但是GPIO引脚有114个
    下载引脚 :PA13、PA14、PB3、PB4等都属于下载引脚(JTAG、SWD)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值