第一章 STM32 GPIO工作原理

本文详细介绍了STM32GPIO的各种工作模式,包括输入的浮动、上拉、下拉和模拟模式,以及输出的开漏、推挽、复用模式。同时解析了GPIO的基本结构,强调了保护二极管和MOS管的作用。
摘要由CSDN通过智能技术生成



一、GPIO简介

          GPIO就是通用I/O(输入/输出)端口,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的GPIO被分成很多组,每组有 16 个引脚,如型号为 STM32F103ZET6 型号的芯片有 GPIOA、GPIOB、GPIOC 至GPIOG 共7 组GPIO,芯片一共144 个引脚,其中GPIO 就占了一大部分,所有的GPIO引脚都有基本的输入输出功能。
        最基本的输出功能是由 STM32 控制引脚输出高、低电平,实现开关控制,如把 GPIO 引脚接入到LED 灯,那就可以控制LED 灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或
三极管控制外部大功率电路的通断。
        最基本的输入功能是检测外部输入电平,如把GPIO 引脚连接到按键,通过电平高低区分按键是否被按下。

二、GPIO工作模式

1.四种输入模式

        GPIO_Mode_IN_FLOATING—输入浮空
        GPIO_Mode_IPU—输入上拉
        GPIO_Mode_IPD —输入下拉
        GPIO_Mode_AIN—模拟输入

2.四种输出模式

        GPIO_Mode_Out_OD—开漏输出
        GPIO_Mode_Out_PP—推挽式输出
        GPIO_Mode_AF_PP —推挽式复用功能
        GPIO_Mode_AF_OD—开漏复用功能

三、GPIO工作模式及解析

1. I/O端口的基本结构框图

      通过 GPIO 硬件结构框图,就可以从整体上深入了解 GPIO 外设及它的各种应用模式。该图从最右端看起,最右端就是代表STM32 芯片引出的 GPIO 引脚,其余部件都位于芯片内部。

2.基本结构分析

  1.保护二极管

        引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入,当引脚电压高于 VDD 时,上方的二极管导通,当引脚电压低于VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

  2.P-MOS管和N-MOS管

 作用:使得GPIO具有“推挽输出”和“开漏输出”的模式。P-MOS管:高电平导通,低电平关闭。 N-MOS管:低电平导通,高电平关闭。

        在推挽输出模式时该结构中输入高电平时,上方的P-MOS 导通,下方的N-MOS 关闭,对外输出高电平;而在该结构中输入低电平时,N-MOS 管导通,P-MOS 关闭,对外输出低电平。

        在开漏输出模式时,上方的P-MOS 管完全不工作。如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS 管导通,使输出接地,若控制输出为 1 (它无法直接输出高电平) 时,则 P-MOS管和 N-MOS 管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。为正常使用时必须外部接上拉电阻。

      推挽输出模式一般应用在输出电平为 0 和 3.3 伏而且需要高速切换开关状态的场合。在 STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式。

        开漏输出一般应用在I2C、SMBUS 通讯等需要“线与”功能的总线电路中。除此之外,还用在电平不匹配的场合,如需要输出 5 伏的高电平,就可以在外部接一个上拉电阻,上拉电源为 5 伏,并且把GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5 伏的电平。如下图。

3.GPIO工作模式解析

1. 输入模式

       在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器GPIOx_IDR 读取I/O 状态。其中输入模式,可设置为上拉、下拉、浮空和模拟输入四种。上拉和下拉输入很好理解,默
认的电平由上拉或者下拉决定。浮空输入的电平是不确定的,完全由外部的输入决定,一般接按
键的时候用的是这个模式。模拟输入则用于ADC 采集。

1.1 浮空输入模式

        浮空输入模式下,I/O端口的电平信号直接进入到输入数据寄存器。
MCU直接读取I/O口电平,I/O的电平状态是不确定的,完全由外部输入决定。即io口接高电平时读取高电平,接低电平时读取低电平。默认状态时,电平不确定。

1.2上拉输入模式

     上拉输入模式下, I/O端口的电平信号经过上拉电阻进入到输入数据寄存器。即io口接高电平时读取高电平,接低电平时读取低电平。默认状态时,电平为高电平。

1.3下拉输入模式

      下拉输入模式下, I/O端口的电平信号经过下拉电阻进入到输入数据寄存器。即io口接高电平时读取高电平,接低电平时读取低电平。默认状态时,电平为低电平。

1.4模拟输入模式

        模拟输入模式下, I/O端口的电平信号不经过TTL肖特基触发器,直接进入ADC模块,并且输入数据寄存器为空 ,MCU不能在输入数据寄存器上读到引脚状态。在模拟输入模式下,上拉电阻和下拉电阻是不起作用的,即使配置上拉和下拉模式,也不会有作用。

2.输出模式

        在输出模式中,推挽模式时双MOS 管以轮流方式工作,输出数据寄存器GPIOx_ODR 可控制I/O输出高低电平。开漏模式时,只有 N-MOS 管工作,输出数据寄存器可控制 I/O 输出高阻态或低
电平。输出速度可配置,有2MHz,10MHz,50MHz 的选项。此处的输出速度即I/O 支持的高低电平状态最高切换频率,支持的频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大即可。在输出模式时施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR 可读取I/O的实际状态。

2.1 开漏输出模式

        开漏模式时,P-MOS管不工作,只有N-MOS管工作,输出数据寄存器可控制 I/O 输出低电平。低电平的时候,N-MOS管导通,I/O引脚输出低电平。高电平的时候,N-MOS管关闭,I/O引脚悬空状态。

2.2 推挽输出模式

        推挽输出模式下, P-MOS管和N-MOS管都工作,输出数据寄存器可以控制输出高电平和低电平。输出数据寄存器输出为 0 的时候,N-MOS管导通,I/O引脚输出低电平。输出数据寄存器输出为 1 的时候,P-MOS管导通,I/O引脚输出高电平。

2.3 复用开漏输出模式

        复用开漏输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。

2.4 复用推挽输出模式

        复用推挽输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。


总结

最后总结下使用情况: 
在 STM32 中选用 IO 模式 
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做 KEY 识别,RX1 
(2)带上拉输入_IPU——IO 内部上拉电阻输入 
(3)带下拉输入_IPD—— IO 内部下拉电阻输入 
(4) 模拟输入_AIN ——应用 ADC 模拟输入,或者低功耗下省电 
(5)开漏输出_OUT_OD ——IO 输出 0 接 GND,IO 输出 1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为 1 时,IO 口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样 IO 口也就可以由外部电路改变为低电平或不变。可以读 IO 输入电平变化,实现 C51 的 IO 双向功能 
(6)推挽输出_OUT_PP ——IO 输出 0-接 GND, IO 输出 1 -接 VCC,读输入值是未知的 
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C 的 SCL,SDA) 
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS) 
 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值