GPIO(General Purpose Input/Output)输入/输出

GPIO最简单的功能是输出高低电平;GPIO还可以被设置为输入功能,用于读取按键等输入信号;也可以将GPIO复用成芯片上的其他外设的控制引脚。

STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH,除了GPIOH只有两个IO,其余每组IO有16根引脚。

1)编写代码步骤

1.看原理图确认要操作的引脚以及相关逻辑 2.GPIO初始化 申明结构体GPI0 InitiypeDef

时钟使能RCC AHBlPeriphclockCmd

配置结构体

调用初始化函数进行初始化 3.写逻辑代码

2)GPIO工作模式

输入模式,输出模式,复用,模拟

4种输入模式

(1)GPIO_Mode_IN_FLOATING 浮空输入

(2)GPIO_Mode_IPU 上拉输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_AIN 模拟输入

输出电流时不够会采用上下拉,开漏输出不够时用上拉,推挽输出强0或强1,开漏...

输出速度,

4种输出模式

(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)

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

(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉,在M4内核是支持的,M3支持)

(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉,在M4内核是支持的,M3支持)

4种最大输出速度

(1)2MHZ (低速)

(2)25MHZ (中速)

(3)50MHZ (快速)

(4)100MHZ (高速)

3)GPIO电路图

1.保护二极管

引脚上的这两个保护二极管可以将引脚外部过高或过低的电压进行钳位,当引脚电压高于VDD_FT 时,上方的二极管导通吸收这个高电压,当引脚电压低于VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁,也叫钳位二极管。

2.上拉、下拉电阻 :

  1. 阻值大概在 30~50K 欧之间,由寄存器控制。

  2. 没有干扰引脚的电压时,即没有外部的上、下拉电压,引脚的电平由引脚内部上、下拉决定,开启 内部上拉电阻工作,引脚电平为高,开启内部下拉电阻工作,则引脚电平为低。

  3. STM32 的内部上拉是一种“弱上拉”,这样的上拉电流很弱,如果有要求大电流还是得外部上拉。

  4. 当配置成上拉模式,即GPIO_PuPd_UP时,IO端口内部通过上拉电阻连接到电源VDD。 当配置成下拉模式,即GPIO_PuPd_DOWN时,IO端口内部通过下拉电阻连接到电源VSS。

  5. 一般,当检测信号发生时,被检测信号接到电源的低电位,如IO口通过按键接到VSS,此时应该配置为上拉模式,按键未按下时,读取IO状态为高电平1,按键按下时,由于外部接到VSS,此时读取IO状态为低电平0。

  6. 反之当检测信号发生时,被检测信号接到电源的高电位,如果IO口通过按键接到VDD,此时应该配置为下拉模式。按键未按下时,读取IO状态为低电平0,按键按下时,由于外部接到VDD,此时读取IO状态为高电平1。

3.施密特触发器 :

  1. 施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且 由于施密特触发器具有滞回特性,所以可用于抗干扰,以及在闭回路正回授/负回授配置中用于实 现多谐振荡器。

  2. 输入电压高于正向阈值电压,输出为高;

  3. 当输入电压低于负向阈值电压,输出为低;

  4. 当输入在正负向阈值电压之间,输出不改变。

4.P-MOS 管和 N-MOS 管 :

  1. 控制 GPIO 的开漏输出和推挽输出两种模式。

  2. 开漏输出: 输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行。

  3. 推挽输出:这两只对称的 MOS 管每次只有一只导通,所以导通损耗小、效率高。

5.IO 口复用功能 :

一个 IO 口可以是通用的 IO 口功能,还可以是其他外设的特殊功能引脚,这就是 IO 口的复用功 能。

6.输入浮空 :

  1. 上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。

  2. IO 口的电平完全是由外部电路决定。如果 IO 引脚没有连接其他的设备,引脚的电平是不可确定的。

7.输入上拉 :

  1. 上拉电阻导通,施密特触发器打开,输出被禁止。

  2. 内部上拉电阻的阻值较大,是“弱上拉”,不适合做电流型驱动。

8.输入下拉 :

  1. 下拉电阻导通,施密特触发器打开,输出被禁止。

  2. 内部下拉电阻的阻值较大,所以不适合做电流型驱动。

9.模拟功能 :

  1. 上下拉电阻断开,施密特触发器关闭,双 MOS 管也关闭。

  2. 用于 ADC、 DAC、 MCO 这类操作模拟信号的外设。

10.开漏输出 :

  1. P-MOS 被“输出控制” 控制在截止状态,只有 N-MOS 还受控制于输出寄存器 , 且上下拉电阻都断开 了,可以看成浮空输入;

  2. 从结果上看它只能输出低电平 Vss 或者高阻态

  3. 常用于 IIC 通讯(IIC_SDA) 或其它需要进行电平转换的场景

  4. 开漏输出模式下 P-MOS 一直在截止状态,即不导通,所以 P-MOS 管的栅极相当于一直接VDD。如果输出数据寄存器①的值为 0,那么 IO 引脚的输出状态②为低电平,

  5. 输出数据寄存器的逻辑 0 经过“输出控制” 的取反操作后,输出逻辑 1 到 N-MOS 管的栅极,这时 NMOS管就会导通,使得 IO 引脚连接到 VSS,即输出低电平。

  6. 如果输出数据寄存器的值为 1,经过“输出控制”的取反操作后,输出逻辑 0 到 N-MOS 管的栅极,这时 N-MOS 管就会截止。 又因为 P-MOS 管是一直截止的,使得 IO 引脚呈现高阻态,即不输出低电平,也不输出高电平。

  7. 因此要 IO 引脚输出高电平就必须接上拉电阻。 又由于 F1 系列的开漏输出模式下,内部的上下拉电阻不可用,所以只能通过接芯片外部上拉电阻的方式,实现开漏输出模式下输出高电平。如果芯片外部不接上拉电阻,那么开漏输出模式下,IO 无法输出高电平。

  8. 在开漏输出模式下, 施密特触发器是工作的,所以 IO 口引脚的电平状态会被采集到输入数据寄存器中,如果对输入数据寄存器进行读访问可以得到 IO 口的状态。也就是说开漏输出模式下,我们可以读取 IO 引脚状态。

11.推挽输出 :

  1. 推挽输出模式 P-MOS 管和 N-MOS 管都用上。

  2. 结果上看它会输出低电平 VSS 或者高电平VDD。

  3. 如果输出数据寄存器①的值为 0,经过“输出控制” 取反操作后,输出逻辑 1 到 P-MOS管的栅极,这时 P-MOS 管就会截止,同时也会输出逻辑 1 到 N-MOS 管的栅极,这时 NMOS 管就会导通,使得 IO 引脚接到 VSS,即输出低电平。

  4. 如果输出数据寄存器的值为 1 ,经过“输出控制” 取反操作后,输出逻辑 0 到 N-MOS管的栅极,这时 N-MOS 管就会截止,同时也会输出逻辑 0 到 P-MOS 管的栅极,这时 PMOS 管就会导通,使得 IO 引脚接到 VDD,即输出高电平。

  5. 当 IO 引脚在做高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有较大的提高。 (拉电流:数字电路输出高电平给负载提供的输出电流,是从输出端流出的电流,表征输出电流的 能力。 灌电流:数字电路输出低电平时外部负载输入的电流,是从输出端流入的电流,表征输入电流的 能力。)

  6. 施密特触发器也是打开的,我们可以读取 IO 口的电平状态。

12.开漏式复用功能 :

  1. 一个 IO 口可以是多个外设的功能引脚,选择作为其中一个选择复用功能时,引脚的状态是由对应的外设控制,而不是输出数据寄存器。

  2. 施密特触发器也是打开的,我们可以读取 IO 口的电平状态,同时外设可以读取 IO 口的信息。

13.推挽式复用功能 :

GPIO初始化

#include "led.h"
#include "stm32f4xx.h"

//代码步骤
/*
1.看原理图确认要操作的引脚以及相关逻辑
2.GPIO初始化
	1.申明结构体  GPIO_InitTypeDef
	2.时钟使能   RCC_AHBlPeriphClockCmd
	3.配置结构体
	4.调用初始化函数进行初始化

3.写逻辑代码
*/
	
void LED_Init(void)//初始化
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//时钟使能,通电还是断电
	
	//开始配置F端口下的9号跟10号引脚。
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10; //PF9引脚
	GPIO_InitStructure.GPIO_Mode= GPIO_Mode_OUT; //输出模式
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //推挽输出
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL; //不进行上下拉
	GPIO_InitStructure.GPIO_Speed=GPIO_High_Speed; //引脚响应速度
	
	GPIO_Init(GPIOF, &GPIO_InitStructure);
	GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);     //set 置位1 灯灭 写高电平
}
  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: GPIO(通用输入/输出)是一种常见的设备接口,在计算机和电子设备中广泛使用。它是一组能够通过编程进行控制和读取的数字引脚,可以连接到各种外部设备上。 通常情况下,计算机系统通过位于主板上的GPIO控制器芯片来提供GPIO接口。GPIO通道的数量和特性可能因设备而异,但通常都包含一些输入输出引脚。输入引脚用于接收外部设备发送的信号,比如按钮按下、传感器检测到的信号等。输出引脚用于控制外部设备的状态,比如点亮LED灯、控制继电器等。 在软件编程方面,我们可以使用操作系统提供的GPIO库或者编程语言的相关函数来实现对GPIO的控制。这些函数可以设置引脚的工作模式(输入输出)、读取引脚的状态(高电平或低电平)以及设置引脚的状态(输出高电平或低电平)。通过编写相应的代码,我们可以实现与外部设备之间的交互。 GPIO的应用非常广泛。它可以用于连接各种传感器和执行器,如温度传感器、湿度传感器、光线传感器、运动探测器等。通过读取传感器的信号,我们可以获取环境的相关数据。通过控制执行器,我们可以实现对外部设备的控制,如开关电灯、控制电机转动等。 总之,GPIO是一种通用的、灵活的设备接口,可以在计算机和电子设备中进行输入输出的控制和读取。通过编程,我们可以与各种外部设备进行连接和通信,实现众多应用场景。 ### 回答2: GPIO是一种通用输入/输出接口,广泛应用于嵌入式系统和物联网设备中。它可以连接各种传感器、执行器和外设,实现与外界的数据交互。 GPIO的主要作用是提供一个程序控制的接口,使嵌入式系统可以读取外部的输入信号,或者向外部输出控制信号。通过GPIO,嵌入式系统可以与各种传感器进行通信,获取环境中的信息。例如,可以通过GPIO连接温度传感器,读取当前的温度值;可以连接光照传感器,获取室内或室外的光照强度。同时,GPIO也可以连接执行器,实现对外部设备的控制。比如,可以通过GPIO控制LED灯的亮灭,或者控制电机的转动。 GPIO的使用非常灵活,可以通过软件进行配置和控制。通常,GPIO会被配置为输入模式或输出模式。在输入模式下,GPIO用于读取外部信号的状态,例如读取按键的按下情况。在输出模式下,GPIO用于向外部发送控制信号,例如给LED灯提供开关信号。通过修改GPIO的状态和引脚配置,嵌入式系统可以实现不同的功能需求。 总之,GPIO作为一种通用输入/输出接口,在嵌入式系统和物联网设备中起到了非常重要的作用。它通过连接各种传感器和外设,实现了与外界的通信和数据交互。同时,GPIO的灵活性和可编程性,使得嵌入式系统可以根据需要进行配置和控制,满足各种不同的应用需求。 ### 回答3: GPIO(通用输入/输出)是一种可以通过编程控制的数字引脚,可用于输入输出数字信号。GPIO通常用于连接外部设备,如传感器、执行器或其他电子元件,以便与计算机或嵌入式系统进行数据交互。 GPIO的工作方式是基于二进制系统,它可以配置为输入输出模式。在输入模式下,GPIO可以检测外部设备的电平状态,例如开关的开/关状态或传感器的触发信号。在输出模式下,GPIO可以向外部设备发送电压信号,例如驱动电机或控制LED灯。 在使用GPIO时,我们可以通过编程的方式来控制引脚的状态。通过设置引脚的状态,我们可以读取输入信号的状态或者发送输出信号到外部设备。这种灵活的控制方式使得GPIO在嵌入式系统和物联网应用中广泛使用。 使用GPIO需要根据具体的硬件平台和编程语言来进行配置和控制。在树莓派等单板计算机中,我们可以使用Python等高级语言来编写GPIO的控制代码。在嵌入式系统中,我们可以使用C/C++等低级语言来操作GPIO的寄存器以实现控制。 总之,GPIO是一种通用的输入/输出接口,它可以连接外部设备,并通过编程方式实现与计算机或嵌入式系统的数据交互。它在各种应用中都起着重要的作用,从简单的按钮控制到复杂的传感器和执行器控制都可以通过GPIO来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值