GPIO(嵌入式学习)

GPIO知识学习

  • 1. GPIO的基本概念
  • 2. GPIO的实际应用
  • 3. 功能描述
    • 3.1 IO结构框图
    • 3.2 知识铺垫
      • 模拟/数字信号
      • VDD、VSS、VCC
      • 施密特触发器
      • 片上外设
    • 3.3 功能详述
      • 浮空输入
      • 上拉输入
      • 下拉输入
      • 模拟输入
      • 开漏输出
      • 推挽输出
  • 4. GPIO相关寄存器
    • 4.1 寄存器
    • 4.2 功能

1. GPIO的基本概念

GPIO是英文General Purpose Input/Output的缩写,中文翻译为通用输入/输出。它是一种在数字电子系统中常见的接口类型,用于与外部设备进行通信和控制。

GPIO接口可以作为输入或输出引脚使用。作为输入引脚时,GPIO可以接收来自外部设备的电信号,并将其转换为数字信号,供系统内部使用。作为输出引脚时,GPIO可以将数字信号发送到外部设备,从而实现对其的控制。

GPIO的基本概念包括以下几个方面:

  1. 引脚:GPIO接口通常由一组引脚组成,每个引脚都可以用作输入或输出。每个引脚都有一个唯一的标识符,如GPIO0、GPIO1等。

  2. 输入模式:当GPIO引脚配置为输入模式时,它可以接收外部设备发送的电信号。通常,输入引脚可以读取高电平(1)或低电平(0)状态,或者在某些系统中可以读取模拟信号。

  3. 输出模式:当GPIO引脚配置为输出模式时,它可以向外部设备发送数字信号。输出引脚可以设置为高电平(1)或低电平(0),以控制连接的设备的状态。

  4. 状态和电平:GPIO引脚的状态表示当前引脚的输入或输出电平。高电平通常表示逻辑1,低电平表示逻辑0。在某些系统中,还可以使用其他状态,如浮空、上拉和下拉等。

  5. 控制寄存器:为了配置和控制GPIO引脚的功能,通常需要通过写入特定的控制寄存器来设置引脚的模式、状态和电平。这些寄存器的具体配置取决于所使用的硬件平台和操作系统。

通过使用GPIO接口,可以方便地与各种外部设备进行交互,如传感器、执行器、显示器、键盘等。在嵌入式系统、单片机和物联网应用中,GPIO是一种非常常见和重要的接口类型。
GPIO(嵌入式学习)_第1张图片

2. GPIO的实际应用

GPIO的实际应用非常广泛,以下是一些常见的示例:

  1. 控制LED:将GPIO引脚配置为输出模式,可以通过设置引脚的高低电平状态来控制LED的亮灭。

  2. 按钮输入:将GPIO引脚配置为输入模式,可以连接按钮或开关,并通过读取引脚的电平状态来检测按钮是否被按下或开关是否打开。

  3. 传感器接口:通过GPIO引脚,可以连接各种传感器,如温度传感器、湿度传感器、光照传感器等。传感器的输出信号可以通过读取GPIO引脚的状态来获取。

  4. 驱动电机:通过GPIO引脚,可以连接电机驱动器,并通过设置引脚的高低电平状态来控制电机的运行方向和速度。

  5. 与外部设备通信:通过GPIO引脚,可以与其他外部设备进行通信,如显示器、LCD屏幕、数码管等。通过设置引脚的状态和电平,可以发送数据或控制命令。

  6. 脉冲宽度调制(PWM)输出:一些GPIO引脚支持PWM功能,可以生成模拟信号,用于控制电机速度、调节LED亮度等需要模拟输出的应用。

  7. 扩展IO功能:通过使用扩展芯片或GPIO扩展板,可以增加系统的GPIO引脚数量,从而实现更多外部设备的控制和通信。

总之,GPIO的应用范围非常广泛,可以用于各种嵌入式系统、物联网设备、机器人、单片机等项目中,以实现与外部设备的连接、控制和通信功能。

3. 功能描述

GPIO(General Purpose Input/Output)是一种通用的输入/输出接口,提供了数字电子系统与外部设备进行通信和控制的能力。其功能描述如下:

  1. 输入功能:GPIO可以配置为输入模式,接收外部设备发送的信号。它可以读取来自传感器、开关、按钮等外部设备的状态,并将其转换为数字信号供系统内部使用。

  2. 输出功能:GPIO可以配置为输出模式,向外部设备发送数字信号。它可以通过设置高低电平或产生脉冲宽度调制(PWM)信号,控制执行器、驱动器、LED等外部设备的状态或行为。

  3. 引脚配置:GPIO的引脚可以灵活配置为输入或输出模式。通过配置寄存器或使用特定的编程接口,可以确定引脚的模式、状态和电平。

  4. 状态读取:GPIO可以读取引脚的状态,即引脚的电平信息。通过读取引脚的状态,可以检测按钮的按下、开关的状态、传感器的测量值等。

  5. 状态设置:GPIO可以设置引脚的状态,即设置引脚的电平信息。通过设置引脚的状态,可以控制外部设备的状态、发送数据或控制命令。

  6. 扩展性:某些系统支持多个GPIO引脚,可以通过扩展芯片或GPIO扩展板增加引脚的数量,从而满足更多外部设备的连接和控制需求。

  7. 通信接口:GPIO可以用于与各种外部设备进行通信,如传感器、显示器、驱动器等。通过读取和设置引脚的状态,可以实现与外部设备之间的数据交换和控制操作。

总之,GPIO提供了一种通用的、灵活的接口,使得数字电子系统能够与外部设备进行交互和控制,实现各种应用需求。它在嵌入式系统、物联网设备、机器人等领域具有广泛的应用。

3.1 IO结构框图

GPIO(嵌入式学习)_第2张图片
GPIO(嵌入式学习)_第3张图片

3.2 知识铺垫

模拟/数字信号

模拟信号(Analog Signal)和数字信号(Digital Signal)是在电子系统中常见的两种类型的信号,它们有以下区别:

  1. 表示方式:模拟信号是连续变化的信号,可以在一个范围内取任意值,例如电压、电流或声音的波形。数字信号是离散的信号,只能取特定的离散值,通常用二进制表示,如0和1。

  2. 值的精度:模拟信号的值可以具有无限的精度,可以有无限数量的小数位数。数字信号的值则具有有限的精度,取决于使用的位数(比特数),例如8位、16位或32位。

  3. 噪声和失真:模拟信号容易受到噪声和失真的影响,因为它们的值可以无限细微地变化。数字信号在传输和处理过程中相对抗干扰能力较强,可以通过错误检测和纠正技术来消除噪声和失真的影响。

  4. 存储和传输:模拟信号通常需要使用连续的物理介质(例如电压或电流)来存储和传输,如模拟音频信号通过电缆传输。数字信号则可以使用离散的物理介质(例如电平或脉冲)来存储和传输,如数字音频信号可以以数字方式进行传输,如通过光纤或数字接口。

  5. 处理和操作:模拟信号在处理和操作时需要使用模拟电路和模拟信号处理技术。数字信号则可以使用数字电路和数字信号处理技术进行处理和操作,如数字滤波、数字逻辑运算等。

总的来说,模拟信号是连续变化的信号,具有无限精度,而数字信号是离散的信号,具有有限精度。数字信号在存储、传输和处理方面具有优势,因为它们可以进行更精确的控制和处理,并具备更好的抗干扰能力。然而,在某些应用中,模拟信号仍然是必需的,例如音频和视频信号处理,传感器测量等。

VDD、VSS、VCC

VDD、VSS和VCC是电子系统中常见的电源引脚标识,表示以下含义:

  1. VDD:VDD是电源引脚的标识,通常表示正极电源(或电源供应电压)。它是从正极电源提供电能给芯片或电路的引脚。

  2. VSS:VSS是电源引脚的标识,通常表示地(或负极电源)。它是连接到电路的地(或接地)引脚,用于提供电路中的参考电位和电流回路。

  3. VCC:VCC是电源引脚的标识,通常表示正极电源。与VDD类似,它也用于表示正极电源引脚,但在某些特定情况下,VCC可能指代特定的电压值(如常见的5V或3.3V),或表示芯片的电源引脚集合。

需要注意的是,具体的命名约定可能因不同的电子系统、芯片或电路而有所不同。有些系统中可能使用VDD和VSS,而其他系统则使用VCC和GND(地)来表示相同的电源引脚。因此,在阅读电路设计文档或数据手册时,最好查看特定系统或器件的规格说明,以了解准确的引脚标识和定义。

施密特触发器

施密特触发器(Schmitt Trigger)是一种具有两个阈值的比较器电路,其作用是将输入信号转换为稳定的数字输出信号。

施密特触发器的主要作用有以下几个方面:

  1. 噪声滤除:施密特触发器具有滞后特性,当输入信号的幅度超过某个高阈值时,输出状态会翻转,而在输入信号的幅度低于某个低阈值时,输出状态再次翻转。这种滞后特性可以抑制输入信号中的瞬态噪声,使输出信号对噪声更加稳定和可靠。

  2. 输入信号调整:施密特触发器可以调整输入信号的幅度范围。通过设置合适的高阈值和低阈值,可以将输入信号的波形范围限定在一个特定的范围内,并将较小的波动或幅度变化转换为稳定的数字输出。

  3. 信号整形和判断:施密特触发器可以将不规则的输入信号转换为方波或脉冲信号。它可以在输入信号的上升或下降沿产生稳定的输出状态转换,用于触发其他数字逻辑电路的操作或判断条件。

  4. 电压转换:施密特触发器可以将输入信号从一种电平转换为另一种电平。例如,将一个变化的模拟信号转换为二进制的高低电平表示,或者将一个非标准的输入信号转换为标准的逻辑电平。

总的来说,施密特触发器在数字电路中起到信号整形、噪声滤除和电平转换的作用。它被广泛应用于各种电路和系统中,如门电路、时钟电路、触摸传感器、开关电路、电压比较器等。

片上外设

片上外设(On-chip Peripherals)是指嵌入式系统或集成电路芯片上集成的各种功能模块或接口,用于与外部设备进行通信、控制和数据交换。这些外设可以与主处理器或控制器协同工作,扩展系统的功能和应用范围。常见的片上外设包括但不限于以下几种:

  1. 通用输入/输出(GPIO):提供通用的数字输入/输出接口,用于连接和控制外部设备,如按钮、开关、传感器等。

  2. 串行通信接口:包括UART(通用异步收发传输器)、SPI(串行外设接口)、I2C(串行总线接口)等,用于与其他设备进行串行数据通信。

  3. 定时器/计数器:用于生成定时、延时或频率计数的功能,常用于时序控制、脉冲调制、定时中断等应用。

  4. PWM(脉冲宽度调制)控制器:用于生成可调节脉冲宽度的信号,广泛用于电机控制、LED亮度调节等应用。

  5. ADC(模数转换器)和DAC(数模转换器):ADC将模拟信号转换为数字信号,DAC将数字信号转换为模拟信号,用于模拟信号采集和输出。

  6. 定序电路(Power Sequencer):用于控制芯片电源的开启和关闭顺序,确保电源稳定性和系统安全。

  7. 接口控制器:包括以太网控制器、USB控制器、CAN控制器等,用于实现与外部设备的高速数据传输和通信。

  8. 存储器控制器:用于管理片上存储器(如闪存、RAM)的读写操作和访问控制。

  9. 中断控制器:用于管理和处理系统中断,实现中断优先级和中断向量表等功能。

  10. 显示控制器:用于控制和驱动液晶显示器(LCD)、有机发光二极管(OLED)等显示设备。

这只是一小部分常见的片上外设,具体的集成电路芯片可能会包含更多其他类型的外设,根据具体的应用需求和芯片设计,选择适合的外设来扩展和实现所需的功能。

3.3 功能详述

浮空输入

浮空输入(Floating Input)是一种引脚配置模式,用于接收外部信号,当没有外部信号输入时,引脚处于高阻抗状态。在这种状态下,引脚不连接到特定的电源或地,并且没有外部电阻将其固定在特定电平上。

浮空输入通常用于读取外部设备的信号,例如传感器或开关。当外部设备产生信号时,信号会通过电路连接到引脚上,从而改变引脚的电平状态。然而,当外部设备没有产生信号时,引脚没有被连接到特定的电平上,因此可能会受到电磁干扰的影响,导致引脚处于不确定的状态。为了避免不确定性,可以使用上拉电阻或下拉电阻来将引脚拉高或拉低,使其保持在已定义的电平上。

浮空输入在数字电路中是常见的配置模式,用于读取外部信号的状态,如按钮按下或开关状态。在使用浮空输入时,需要注意对引脚的电平状态进行适当的判断和处理,以确保正确读取外部信号并避免不确定性的影响。

上拉输入

上拉输入(Pull-Up Input)是一种引脚配置模式,用于将引脚连接到正极电源(如VCC)通过一个上拉电阻,以确保引脚在没有外部信号输入时保持在高电平(通常是逻辑高)。

在上拉输入模式下,引脚的电路连接如下:

  • 引脚通过一个大约几千欧姆的上拉电阻连接到正极电源(VCC)。
  • 当没有外部信号输入时,上拉电阻将引脚拉高,使其保持在高电平状态。

上拉输入常用于读取外部设备的信号,例如开关或按钮。当外部设备没有产生信号时,引脚通过上拉电阻被拉高到逻辑高电平,从而确保引脚在没有输入时有一个已定义的状态。当外部设备通过连接到引脚来拉低引脚时,可以改变引脚的状态,例如按下按钮或改变开关状态。

需要注意的是,在使用上拉输入时,如果外部设备连接到引脚并拉低引脚,外部设备应具备足够的驱动能力以克服上拉电阻的作用,以确保引脚能够稳定地被拉低。

上拉输入是数字电路中常见的配置模式之一,用于提供引脚的默认状态和读取外部信号。在使用上拉输入时,需要根据具体的硬件和信号要求选择适当的上拉电阻值,并进行合适的信号处理和判断。

下拉输入

下拉输入(Pull-Down Input)是一种引脚配置模式,用于将引脚连接到地(GND)通过一个下拉电阻,以确保引脚在没有外部信号输入时保持在低电平(通常是逻辑低)。

在下拉输入模式下,引脚的电路连接如下:

  • 引脚通过一个大约几千欧姆的下拉电阻连接到地(GND)。
  • 当没有外部信号输入时,下拉电阻将引脚拉低,使其保持在低电平状态。

下拉输入常用于读取外部设备的信号,例如开关或按钮。当外部设备没有产生信号时,引脚通过下拉电阻被拉低到逻辑低电平,从而确保引脚在没有输入时有一个已定义的状态。当外部设备通过连接到引脚来拉高引脚时,可以改变引脚的状态,例如按下按钮或改变开关状态。

需要注意的是,在使用下拉输入时,如果外部设备连接到引脚并拉高引脚,外部设备应具备足够的驱动能力以克服下拉电阻的作用,以确保引脚能够稳定地被拉高。

下拉输入是数字电路中常见的配置模式之一,用于提供引脚的默认状态和读取外部信号。在使用下拉输入时,需要根据具体的硬件和信号要求选择适当的下拉电阻值,并进行合适的信号处理和判断。

模拟输入

模拟输入(Analog Input)是一种引脚配置模式,用于读取外部模拟信号的电压或电流,并将其转换为数字形式以供处理。

在模拟输入模式下,引脚被连接到外部设备或传感器,以接收连续变化的模拟信号。引脚通常与一个模拟到数字转换器(ADC)相结合,该转换器将模拟信号转换为数字形式,以便后续的数字信号处理。

模拟输入可以用于测量各种类型的模拟信号,如温度、光强、声音等。外部设备或传感器将模拟信号传递给引脚,引脚通过ADC将模拟信号转换为数字值。这些数字值可以通过处理和分析,用于监测、控制或生成相应的反馈信号。

在使用模拟输入时,需要考虑以下几点:

  1. 确保引脚的电压或电流范围与外部模拟信号相匹配。
  2. 选择合适的ADC分辨率和采样率,以满足应用需求。
  3. 进行适当的信号处理和滤波,以提高信号质量和减小噪声干扰。

需要注意的是,模拟输入与数字输入(Digital Input)有所不同。数字输入是读取逻辑高或逻辑低的离散信号,而模拟输入读取连续变化的模拟信号。模拟输入通常需要更高的精度和处理复杂性,以满足对模拟信号的准确测量和分析的要求。

开漏输出

开漏输出(Open-Drain Output)是一种引脚输出配置模式,其中引脚可以连接到外部负载或电路,但只能拉低(连接到地)而不能主动拉高(连接到电源)。

在开漏输出模式下,引脚的输出状态可以分为两种:

  1. 拉低状态:引脚处于低电平状态,连接到地,形成一个低阻抗通路,允许电流从引脚流过,从而将外部负载拉低。
  2. 高阻状态:引脚处于高阻抗状态,不连接到任何电源或地,形成一个高阻抗断路,外部负载不受引脚控制。

开漏输出常用于驱动外部负载或与其他开漏输出设备进行电平兼容的通信,如I2C总线。通过使用外部上拉电阻,可以将开漏输出与其他设备或电路相连接,以实现协调的电平转换。

在使用开漏输出时,需要注意以下几点:

  1. 引脚在拉低状态时可以提供较大的输出电流,但在拉高状态时不能提供输出电流。因此,需要通过外部上拉电阻将引脚拉高到所需的电平。
  2. 在连接多个开漏输出设备时,需要确保只有一个设备处于拉低状态,以避免短路和冲突。
  3. 开漏输出可以实现电平的逻辑与或非操作,但不能直接实现逻辑与非操作,因为无法主动拉高。

总的来说,开漏输出提供了一种灵活的输出模式,适用于与其他设备或电路进行电平兼容的通信和驱动外部负载的应用场景。

推挽输出

推挽输出(Push-Pull Output)是一种引脚输出配置模式,其中引脚可以主动拉高(连接到电源)和拉低(连接到地),以提供全面的输出控制能力。

在推挽输出模式下,引脚的输出状态可以分为两种:

  1. 拉高状态:引脚处于高电平状态,连接到电源(如VCC),提供正向电压和电流输出。
  2. 拉低状态:引脚处于低电平状态,连接到地(GND),提供零电压和电流输出。

推挽输出允许引脚在不同电平之间切换,可以主动驱动外部负载或与其他设备进行电平兼容的通信。它提供了较低的输出阻抗,因此可以提供较高的输出电流能力,适用于驱动各种类型的负载。

在使用推挽输出时,需要注意以下几点:

  1. 确保引脚的输出电流能力与所驱动的负载要求相匹配。
  2. 在与其他设备进行通信时,确保推挽输出与相应设备的输入电平兼容。
  3. 避免短路和冲突,确保在同时连接多个推挽输出设备时只有一个设备处于拉高状态。

推挽输出是最常见和常用的输出模式,可广泛应用于数字电路、微控制器和集成电路中,用于驱动各种外部负载和与其他设备进行可靠的通信。

4. GPIO相关寄存器

4.1 寄存器

4 个 32 位 配 置 寄 存 器
GPIOx_MODER 模式寄存器
GPIOx_OTYPER 输出模式寄存器
GPIOx_ OSPEEDR 输出速度寄存器
GPIOx_PUPDR 上拉下拉寄存器

2 个 32 位数据寄存器
GPIOx_IDR 输入数据寄存器
GPIOx_ODR 输出数据寄存器

1个 32 位置位 / 复位寄存器
GPIOx_BSRR 置位 / 复位寄存器

2 个 32 位复用功能寄存器
GPIOx_AFRH
GPIOx_AFRL

4.2 功能

这些寄存器是基于32位寄存器的,其具体功能如下:

  1. GPIOx_MODER(模式寄存器):用于配置GPIO引脚的模式(输入或输出)。每个引脚通常使用两个位表示模式,例如00表示输入模式,01表示输出模式。

  2. GPIOx_OTYPER(输出模式寄存器):用于配置GPIO引脚的输出类型。每个引脚通常使用一个位表示输出类型,例如0表示推挽输出,1表示开漏输出。

  3. GPIOx_OSPEEDR(输出速度寄存器):用于配置GPIO引脚的输出速度。每个引脚通常使用两个位表示输出速度,例如00表示低速,11表示高速。

  4. GPIOx_PUPDR(上拉下拉寄存器):用于配置GPIO引脚的上拉或下拉电阻。每个引脚通常使用两个位表示上拉/下拉配置,例如00表示无上拉/下拉,01表示上拉,10表示下拉。

  5. GPIOx_IDR(输入数据寄存器):用于读取GPIO引脚的输入数据状态。每个位对应一个引脚,读取该位可以获取相应引脚的输入电平。

  6. GPIOx_ODR(输出数据寄存器):用于写入GPIO引脚的输出数据状态。每个位对应一个引脚,写入该位可以设置相应引脚的输出电平。

  7. GPIOx_BSRR(置位/复位寄存器):用于通过设置或复位位来控制GPIO引脚的输出电平。每个引脚通常使用两个位,一个位用于置位(设置为1),另一个位用于复位(设置为0)。

  8. GPIOx_AFRH和GPIOx_AFRL(复用功能寄存器):用于配置GPIO引脚的复用功能,例如将引脚用作特定的外设功能(如UART、SPI等)。这些寄存器通常将32位分为两个部分,每个部分对应一组引脚。

需要注意的是,GPIO寄存器的具体名称和地址可能因不同的控制器或微控制器而异。在实际使用时,应参考相应的硬件文档或数据手册以了解准确的寄存器名称、功能和操作方法。

你可能感兴趣的:(嵌入式底层,单片机,学习,stm32)