STM32学习笔记——GPIO工作原理(八种工作模式)

发布者:幸福旅程最新更新时间:2022-01-15 来源: eefocus关键字:STM32  GPIO  工作模式 手机看文章 扫描二维码
随时随地手机看文章

  STM32F103RCT6一共有4组IO口,一共有16*3+3=51个IO口

   GPIOA0~A15

  GPIOB0~B15

  GPIOC0~C15

  GPIOD0~D2


一、GPIO 功能描述

  每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。


STM32 的 IO 口可以由软件配置成如下 8 种模式:

1、输入浮空

2、输入上拉

3、输入下拉

4、模拟输入

5、开漏输出

6、推挽输出

7、推挽式复用功能

8、开漏复用功能


  每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。

在这里插入图片描述

   VCC:C=circuit 表示电路的意思, 即接入电路的电压;

  VDD:D=device 表示器件的意思, 即器件内部的工作电压;

  VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压。

  对于数字电路来说,VCC是电路的供电电压,VDD是芯片的工作电压(通常Vcc>Vdd),VSS是接地点。例如,对于ARM单片机来说,其供电电压VCC一般为5V,一般经过稳压模块将其转换为单片机工作电压VDD = 3.3V。

  TTL肖特基触发器:将模拟信号转化为数字信号,这里有一个阈值电压的概念,比如从低到高达到多少才会导通,从高到底多少才会关闭。


二、GPIO工作方式(重要)


4种输入模式:

   输入浮空

   输入上拉

   输入下拉

   模拟输入

4种输出模式:

   开漏输出

   开漏复用功能

   推挽式输出

   推挽式复用功能

3种最大翻转速度:

   -2MHZ

   -10MHz

   -50MHz


①输入浮空模式(GPIO_Mode_IN_FLOATING)

在这里插入图片描述

  输入浮空的时候走的是黄色的部分,顺序为①——④。再输入浮空的时候上拉和下拉的两个开关(即②和①之间的开关)是断开的,输入电平从①处输入进去,经过施密特触发器(这时施密特触发器是打开的),电平直接传到输入数据寄存器,然后CPU就可以通过读取输入数据寄存器得到外部输入电平的值。即在输入浮空模式下,我们可以读取外部的电平。

在这里插入图片描述

  输入浮空一般多用于外部按键输入,在浮空输入状态下,IO状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。


②输入上拉(GPIO_Mode_IPU)


  输入上拉和输入浮空的区别就是上拉电阻(30-50K)是接通的。

  CPU通过读取输入数据寄存器的值来得到输入高低电平的值。

  上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平,而在信号输入为低电平时输入端的电平应该也为低电平。如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉电阻就是为了保证无信号输入时输入端的电平为高电平。


③输入下拉(GPIO_Mode_IPD)

在这里插入图片描述

  输入下拉就是下拉电阻是接通的。

  下拉电阻就是为了保证无信号输入时输入端的电平为低电平。


④模拟输入(GPIO_Mode_AIN)

在这里插入图片描述

  将外部的模拟量转换成数字量。外部的输入是模拟的,将其转换成数字量。 作为模拟输入一般是0-3.3v。

  应用于ADC模拟输入,或者低功耗下省电。


⑤开漏输出(GPIO_Mode_Out_OD)

在这里插入图片描述

       MOS管部分可看作如下电路:

在这里插入图片描述

  开漏输出模式下,CPU可以写寄存器(位设置/清除寄存器),比如写1,最终会被映射到输出数据寄存器,输出数据寄存器连通的是输出控制电路,如果我们的输出是1,N-MOS管就处于关闭状态(P-MOS从不被激活),这时IO端口的电平就不会由我们输出的1来决定,因为N-MOS管已经截止了,所以IO口的电平是由外部的上拉或下拉决定。在输出模式下,输出的电平也可以通过输入电路读取到输入数据寄存器,然后被CPU读取。


  所以,当我们输出1时,我们读取的输出电平可能不是我们输出的1,读取的值是由外部的上拉或下拉决定的。当我们的输出是0,这时N-MOS管处于开启状态,IO口的电平就会被N-MOS管拉到Vss,这时IO口的电平输出就为0,CPU通过输入电路读取IO口的电平也就为0。


  输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般 20mA以内)。

  开漏形式的电路有以下几个特点:

  ①利用外部电路的驱动能力,减少 IC (集成电路)内部的驱动。当 IC 内部 MOSFET(金属-氧化物半导体场效应晶体管,简称金氧半场效晶体管,可分为“N型”与“P型”,通常又称为NMOSFET与PMOSFET,其他简称尚包括NMOS、PMOS) 导通时,驱动电流是从外部的VCC 流经 R pull-up(上拉电阻) ,MOSFET 到 GND。IC 内部仅需很下的栅极驱动电流。

  ②一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻。

  ③开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。


⑥复用开漏输出(GPIO_Mode_AF_OD)

在这里插入图片描述

  复用开漏输出和开漏输出的区别就是输出1和0的来源不同,开漏输出是由CPU写入的,映射到输出数据寄存器连通到输出电路,而复用开漏输出是由复用功能输出决定的,即来自片上的外设,其他的地方都一样。


  复用开漏输出、复用推挽输出可以理解为GPIO口被用作第二功能时的配置情况(比如串口USART),即并非作为通用IO口。


⑦推挽输出(GPIO_Mode_Out_PP)

在这里插入图片描述
在这里插入图片描述

  推挽输出控制输出的寄存器和开漏输出是一样的,当输出为1,这时P-MOS管被导通,N-MOS管截止,输出的1就被传输到IO端口,当输出为0,P-MOS管截止,N-MOS管导通,输出的0就被传输到IO口。同样,我们也可以通过输入电路读取IO口的输出。


  推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由 IC 的电源低定。


  推挽电路是两个参数相同的三极管或 MOSFET, 以推挽方式存在于电路中, 各负责正负半周的波形放大任务, 电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。


⑧复用推挽输出(GPIO_Mode_AF_PP)

在这里插入图片描述

  复用推挽输出和推挽输出的区别也输出1和0的来源不同,其它的地方都一样。

  复用开漏输出、复用推挽输出可以理解为GPIO口被用作第二功能时的配置情况(比如说串口),即并非作为通用IO口。


上电复位后,GPIO默认为浮空状态,部分特殊功能引脚为特定状态。


复位后,JTAG引脚被置于输入上拉或下拉模式:

  ─ PA15:JTDI置于上拉模式

  ─ PA14:JTCK置于下拉模式

  ─ PA13:JTMS置于上拉模式

  ─ PB4: JNTRST置于上拉模式

  当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。

关键字:STM32  GPIO  工作模式 引用地址:STM32学习笔记——GPIO工作原理(八种工作模式)

上一篇:正点原子STM32学习笔记——通用定时器基本原理
下一篇:正点原子STM32笔记——DMA原理

推荐阅读最新更新时间:2024-11-11 10:35

STM32嵌入式开发,米尔STM32MP135核心板助力充电桩发展
随着电动车的普及和环保意识的增强, 充电桩作为电动车充电设备的重要一环,充电桩行业正迅速发展,消费市场的大量应用也造就市场的需求量不断增长 。因此,产品的功能、可靠性、安全性等要求也变得尤为重要,而采用传统单片机产品并不能满足充电桩的智能控制等需求,本文详细介绍基于米尔STM32MP135核心板的充电桩应用方案。 图1:充电方案图 采用STM32MP135系列微处理器进行电动汽车的智能嵌入式充电桩设计,并通过“指挥”8位和16位微控制器实现复杂功能的智能控制。在智能充电桩的应用里,具备高性价比、低功耗、高可靠性的STM32MP135优势有以下几个方面: 跑Linux系统,实时处理数据和任务 充电桩通常由一个
[单片机]
<font color='red'>STM32</font>嵌入式开发,米尔STM32MP135核心板助力充电桩发展
按键开关机电路图 按键开关机电路设计方案
最近做个基于STM32脑波检测的项目,甲方爸爸要求使用按键进行开关机。在网上查了一些资料,找到了很多案例分享,在此进行总结。 主要分为以下两部分: 单片机控制按键开关机电路 独立按键开关机电路 1、单片机控制按键开关机电路 1.1、简约版 图中Ctr和Key接单片机管脚,作用如下: Ctr作为开关控制用 Key作为按键检测用 操作流程: 开机:按下按键,Q1导通,单片机上电,控制Ctr为低电平,保持Q1导通。 关机:再按下按键,单片机控制Ctr为高电平,此时松开按键Q1截至,单片机停电。 如图: 简约版 优缺点分析: 优点:电路简单,元器件比较少。 缺点:在停机状态下单片机的IO口依旧带电,正常使用没问
[单片机]
按键开关机电路图 按键开关机电路设计方案
修改STM32库函数中的晶振值
STM32F407的库文件中默认晶振值为25MHz,若外接晶振8MHz,则需修改以下几个地方: 1)修改HSE_VALUE的值 将#define HSE_VALUE ((uint32_t)25) /*! Value of the External oscillator in Hz */ 修改为 #define HSE_VALUE ((uint32_t)8) /*! Value of the External oscillator in Hz */ 2)修改PLL_M的值 将#define PLL_M 25修改为 #define PLL_M 8 3)修改STM32F407工程的Options设置 在Option for t
[单片机]
STM32串口+DMA使用1
STM32有5个串口资源(USART1,USART2,USART3及UART4,UART5)。其中3个USART(通用同步/异步收/发器universalsynchronous asynchronous receiver and transmitter);2个UART(通用异步收/发器universalasynchronous receiver and transmitter);至于USART与UART的区别,如果只是拿来做串口用,没什么区别,在车载项目里,我们拿来做串口用,USART与UART在编程上并没有区别。 其中USART1,USART2,USART3,UART4支持DMA方式,UART5不支持DMA。(详
[单片机]
STM32开发笔记61: 解决Undefined symbol ethernetif_init (referred from lwip.
单片机型号:STM32F407VGT6 在STM32开发笔记60: 在STM32CubeMX中配置LwIP文章的基础上进行分层设计,将与用户设计相关的文件挑出来单独建立一个工程,此工程使用CPP11进行生成,在链接的时候提示错误。 挑出的与用户逻辑相关的文件如下图所示: 错误如下图所示: ethernetif_init函数出现在ethernetif.c文件中,代码如下。 err_t ethernetif_init(struct netif *netif) { LWIP_ASSERT( netif != NULL , (netif != NULL)); #if LWIP_NETIF_HOSTNA
[单片机]
<font color='red'>STM32</font>开发笔记61: 解决Undefined symbol ethernetif_init (referred from lwip.
STM32定时器控制led灯亮灭
SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产 生一次中断,以此循环往复。 在使用时,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。 接下来,利用 SysTick 产生 1s 的时基,LED 以 1s 的频率闪烁。 1、设置重装载寄存器的值 2、清除当前数值寄存器的值 3、配置控制与状态寄存器 配置头文件: void PendSV_Handler(void) { }
[单片机]
时钟失效后STM32还能运行是什么情况
该问题由某客户提出,发生在 STM32F103VDT6 器件上。据其工程师讲述:在其产品的设计中,STM32 的 HSE 外接 8MHz 的晶体产生振荡,然后通过 STM32 内部的PLL 倍频到 72MHz,作为 STM32 的系统时钟,驱动芯片工作。在 STM32 片外有专用的看门狗芯片,监控 STM32 的运行。STM32 内部的软件会在 STM32 的某个管脚上产生脉冲来复位看门狗。一旦 STM32 没有及时的产生脉冲来复位门狗,则看门狗会认为 STM32 运行不正常,从而复位 STM32。在对该产品做可靠性测试时,进行了对看门狗监控时钟失效能力的测试。测试的方法是:将 HSE 外接的晶体的两个端子接地,使其停止振荡,从而
[单片机]
时钟失效后<font color='red'>STM32</font>还能运行是什么情况
STM32GPIO的8种工作模式
最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总
[单片机]
<font color='red'>STM32</font>中<font color='red'>GPIO</font>的8种<font color='red'>工作</font><font color='red'>模式</font>

推荐帖子

高性能X波段直接式频综的设计
介绍一种X波段直接式频综的设计方案,对其输出杂散进行分析,并给出研制结果,在10GHz的输出频率上,偏离载频1kHz处的相噪为-108dBcHz,杂散优于-70dBc,跳频时间小于0.7Ls,可捷变40个点。高性能X波段直接式频综的设计
JasonYoo 电源技术
ant基本天线阵 附带PPT哦
ant基本天线阵附带PPT哦
btty038 RF/无线
HEF4051是哪个常用芯片的替代品,想看一下与它相同功能的常用芯片的应用资料
HEF4051是哪个常用芯片的替代品,这个芯片的应用资料太少,想看一下与它相同功能的常用芯片的应用资料。谢谢大家。HEF4051是哪个常用芯片的替代品,想看一下与它相同功能的常用芯片的应用资料CD4051。如果使用正负5V的电源电压,还可以考虑74HC4051、CD74HC4051。想看一下与它相同功能的常用芯片的应用资料HEF4051是单8路模拟开关。你要看的是各种模拟开关如何工作。
深圳小花 PCB设计
多路复用的LED设计程序怎么写?(急.急.急...)
最普通的行列矩阵式驱动,可以用N+M个IO驱动N*M个LED。而这种被叫做Charlieplexing的方法可以用N个IO驱动N*(N-1)个LED。也就是说要驱动6个LED,用行列式需要5个口,而这种方法只要3个。LED也多,节省的IO越多。比方说驱动20个LED,行列式要用9个,而这种只要5个。这么做有个前提,IO口要有三种状态:高电平输出、低电平输出、高阻输入,利用“行列分时复用”的思想,设计电路。如下图:用汇编语言如何进行程序编写?(80c51)哪位兄弟能发
zd169 嵌入式系统
DIY led贴片灯制作方法,不易错过
为了让广大的电子爱好者和电子DIY发烧友能够自己制作简易的贴片LED节能灯,现博主特意为广大的朋友奉献一款贴片LED节能灯的制作资料和贴片LED灯的简易制作过程包含贴片LED节能灯制作电路图,以下是10贴片LED灯的制作电路图:如图是一款贴片LED照明灯具的实用电路图,该灯使用220V电源供电,220V交流电经C1降压电容降压后经全桥整流再通过C2滤波后经限流电阻R3给串联的10颗贴片LED提供恒流电源.贴片LED的额定电流为20mA,但是我们在制作节能灯的时候要考虑很多方
探路者 LED专区
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved