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  工作模式 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic556641.html

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

推荐阅读

Systick滴答定时器讲解
Systick定时器基础知识讲解:Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有- Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS心跳时钟。Systick定时器就是系统滴答定时器,一个24位的倒计数(从大到小)定时器,计到0时,将从RELOAD寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。SysTick定时器被捆绑在NVIC中,用于产生SYS
发表于 2022-06-24
Systick滴答定时器讲解
STM32的端口复用和重映射
什么是端口复用?STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。例如:串口1的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。复用功能的配置:以下端口复用配置过程以PA9,PA10配置为串口1为例GPIO端口时钟使能。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);复用外设时钟使能。比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。RCC_APB2PeriphC
发表于 2022-06-24
<font color='red'>STM32</font>的端口复用和重映射
STM32的NVIC中断优先级
一、STM32 NVIC中断优先级管理1,中断:CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置。STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。在 STM32F103 系列 上面,又只有 60 个(在 107 系列才有 68 个)可屏蔽中断。如下:2,中断管理方法:首先,对 STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。分组配置是在寄存器SCB->AIRCR以配置:(根据AIRCR
发表于 2022-06-24
<font color='red'>STM32</font>的NVIC中断优先级
STM32串行通信原理
一、通信接口背景知识1,处理器与外部设备通信的两种方式:A.并行通信传输原理:数据各个位同时传输。(用多个口同时传输多位数据)优点:速度快缺点:占用引脚资源多B.串行通信传输原理:数据按位顺序传输。优点:占用引脚资源少缺点:速度相对较慢2,串行通信:按照数据传送方向,分为:(1),单工(a):数据传输只支持数据在一个方向上传输(2),半双工(b):允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;(3),全双工(c):允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。3,串行通信的通信方式同步通信:带时钟同
发表于 2022-06-24
<font color='red'>STM32</font>串行通信原理
串口通信的实验
串口操作相关库函数(省略入口参数):void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能void USART_Cmd();//使能串口void USART_ITConfig();//使能相关中断void USART_SendData();//发送数据到串口,DRuint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据FlagStatus USART_GetFlagStatus();//获取状态标志位void USART_ClearFlag();//清除状态标志位ITStatus USART_GetITStatus();//获取中断状态标志位voi
发表于 2022-06-24
串口通信的实验
独立看门狗实狗实验—IWDG
概述:为什么要看门狗?在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它仍有效。独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。功能介绍:在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此
发表于 2022-06-24
独立看门狗实狗实验—IWDG

推荐帖子

TMS320F28335 SPI串口扩展(1扩4)
我需要通过read_reg()读取VK3224(扩展芯片)寄存器的值,但是在接收中断处理时,接收FIFO中会有好几个数据,导致读取出来的是错误数据,unsignedcharsend(unsignedchardata1,unsignedchardata2) { unsignedinttemp1,i; unsignedchartemp2; temp1=data1*256+data2; SpiaRegs.SPITXBUF=temp1; while(Spia
jiangxiaoliang DSP 与 ARM 处理器
基于Modbus通信协议的eView触摸屏与51单片机的通信设计
Modbus协议由于其具有开放性、透明性、成本低、易于开发等特点,已成为当今工业领域通信协议的首选。   本文介绍了一种基于Modbus通信协议的eView触摸屏与常用的51单片机的通信方法。该方法通过C51编程实现Modbus通信,在51系列单片机上具有通用性,有一定的借鉴作用。   工业控制中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。单片机广泛应用于工控领域中,与触摸屏配合,可组成良
灞波儿奔 RF/无线
DSP C6000 中断中断程序解析
/************************************main.c文件:********************************/ voidmain() { CSL_init();//CSL函数初始化 Htimer=TIMER_open(TIMER_DEV0,TIMER_OPEN_RESET);//打开定时器0,返回定 时器句柄 TimerEventId=TIMER_getEventId(
火辣西米秀 DSP 与 ARM 处理器
WINCE 界面设计的选择
公司最近要把原来的项目移植到WINCE上,以前的项目是我用C++BUILDER写的,现在在WINCE上,我打算用VC开发,软件具体界面如下: 这个见面很简单,上面相当于是导航条吧。。。下面是4涨页面,上面的导航条中,随着页面的变化,4个图标也随之变化,请问这个界面用VC的话要如何设计呢?? 是用CDialog来组织,还是用MDI,或者别的方法???WINCE界面设计的选择
gncg WindowsCE
弱弱问一句:stm32是在什么平台上开发的?
平常用的最多的是ads1.2,刚接触stm32,从零开始的小朋友。弱弱问一句:stm32是在什么平台上开发的?
qqmhappy stm32/stm8
超宽带安全吗?
在分析UWB技术的安全性时,有多个方面需要讨论。首先UWB脉冲的功率是1/10000-1/100000,然后是手机发出的信号的功率,所以大家都可以放心使用。 UWB能够以任何其他无线技术无法比拟的精度水平测量设备的相对位置。当与高度安全的唯一标识符结合使用时,它可以通过双重身份验证保护车辆免受未经授权的访问。 支持UWB的汽车可以检测车主的存在,验证他的身份,并确保如果两个对象(例如汽车及其钥匙)之间的距离超过预定义的阈值,则它们之间的通信将被拒绝。 这使得任何欺诈访
btty038 RF/无线
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved