历史上的今天
返回首页

历史上的今天

今天是:2024年12月06日(星期五)

正在发生

2021年12月06日 | STM32学习笔记——GPIO工作原理(八种工作模式)

2021-12-06 来源:eefocus

  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引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。

推荐阅读

史海拾趣

DEMMELPRODUCTS公司的发展小趣事

在成功推出首款产品后,DEMMELPRODUCTS公司开始积极拓展市场。公司管理层敏锐地捕捉到全球化的发展趋势,积极寻求与国际知名企业的合作机会。通过与跨国公司的技术交流和项目合作,DEMMELPRODUCTS公司的产品逐渐进入国际市场,并获得了良好的口碑。同时,公司还积极参加国际电子展会和论坛,提升品牌知名度和影响力。

诚润电子(CHEVRON)公司的发展小趣事

诚润电子深知,一个优秀的团队是企业成功的关键。因此,他们一直致力于打造一支高素质、专业化的团队。公司注重员工的培训和发展,为员工提供广阔的职业发展空间和良好的福利待遇。同时,诚润电子还积极营造一种积极向上的企业文化氛围,让员工在工作中感受到归属感和成就感。这种良好的团队建设机制为诚润电子的持续发展提供了有力的保障。

HTC Korea(TAEJIN Technology )公司的发展小趣事

HTC Korea自成立以来,一直致力于国际化布局,与全球各地的合作伙伴建立了良好的关系。目前,HTC的产品已在欧美、亚泰地区大量销售,与各地的电信运营商、芯片制造商等保持了紧密的合作关系。这种广泛的合作伙伴网络为HTC提供了强大的市场支持和技术保障,推动了其在全球范围内的快速发展。同时,HTC还通过了ISO9001及ISO14001质量体系认证,以系统、人性化的管理努力成为行业的佼佼者。

Fullywell Semiconductor Co Ltd公司的发展小趣事

Fullywell Semiconductor成立于2005年,由一群在半导体领域拥有多年经验的工程师和投资人共同创立。公司初期专注于研发高性能模拟集成电路,以解决当时市场上对于低功耗、高精度信号处理芯片的迫切需求。通过不懈的努力,Fullywell成功推出了其首款产品——一款针对移动通信设备的低功耗射频前端芯片,迅速获得了市场的认可。这一技术创新不仅为公司赢得了首批重要客户,也为后续的发展奠定了坚实的技术基础。

AITSEMI公司的发展小趣事

随着全球化趋势的加剧,AITSEMI公司开始实施全球化战略,积极开拓海外市场。通过设立海外分支机构、参加国际展会等方式,AITSEMI成功将产品推广至全球范围,并赢得了广泛的国际认可。同时,公司还加大了品牌建设的力度,通过广告宣传、社交媒体推广等方式提升品牌影响力,进一步巩固了公司在全球电子行业的领先地位。

这些故事基于AITSEMI公司的公开资料和发展历程进行编写,旨在展示其在电子行业中的成长和发展。然而,由于公司具体的发展过程可能涉及更多的细节和未公开的信息,因此这些故事可能并不完全准确或详尽。如需更详细和准确的信息,建议直接访问AITSEMI公司的官方网站或查阅相关新闻报道。

Anixter Inc公司的发展小趣事

AITSEMI公司成立于XXXX年,创立之初便以研发高性能模拟与混合信号IC为核心目标。面对当时市场上对高性能、高性价比集成电路的迫切需求,AITSEMI团队凭借深厚的技术积累和敏锐的市场洞察力,成功开发出了一系列具有竞争力的产品,为公司的初步发展奠定了坚实的基础。

问答坊 | AI 解惑

我过去收藏的一些运放资料

这几天为了寻找一些资料,把过去刻录的光盘找了出来。其中有些资料是关于运放的,想到也许能对大家有些参考价值,拿出来共享吧。也算是我响应号召吧。 这些是比较器资料。…

查看全部问答>

mobile 6,一个最前端显示的程序隐藏了OK和×按钮,但是 × 按钮经常还是会出现,恳请大家帮忙看看

mobile 6,一个最前端显示的程序隐藏了OK和×按钮,但是 × 按钮经常还是会出现,点击开始中其他程序之后有消失了,怀疑是被我关闭的“信息”收件箱留下,点击之后我的程序就再也启动不起来了。 点击自己添加的返回按钮之后,屏幕最上面还显示我的 ...…

查看全部问答>

帮忙找个语法错误

  下面有标注的地方有错误,提示信息是“syntax error near \'else\'”,出错的地方在下文中标出,请大家帮忙找一下,谢谢了 #include unsigned char keyboard[]={0x7E,0xBE,0xDE,0xEE,  //0,1,2,3      &nb ...…

查看全部问答>

!!销售/收购/维修agilent 8714et hp8714et,agilent 8714et509239856

!!销售/收购/维修agilent 8714et hp8714et,agilent 8714et09239856 银通仪器有限公司 手机:13509239856 TEL:0769-87912629 FAX:0769-87912842 QQ:350534337 E-MAIL:yonglin__2007@126.com(下划线两横) 地址:广东省东莞市塘厦镇东方花 ...…

查看全部问答>

请教:摄像头为什么在光线比较暗时帧率会下降?

手边的摄像头都是这个德性,光线稍微暗一点帧率就降到12左右了,还拖影,比较烦 请问为什么为出现这样的情况呢 会不会是在摄像头的芯片上在做白平衡,运算量比较大,才导致了帧率下降? 我在一些应用中不想让图像被处理过,只是想获得比较高的帧率,并且 ...…

查看全部问答>

利用1121仿波特率为9600串口遇到的怪现象

我根据TI代码改写的程序:下面是TI的例子 ;****************************************************************************** ; MSP430x11x1 Demo - Timer_A, Ultra-Low Pwr UART 9600 Echo, 32kHz ACLK ; ; Description: Use Timer_A CC ...…

查看全部问答>

用pwm控制电热丝功率,用可控硅好还是固态继电器好

大家好,求问 我用pwm波控制电热丝的功率,pwm波的周期大概为33ms,那么是用可控硅好还是用固态继电器好啊,开关频率太频繁是不是会影响固态继电器的使用寿命啊 谢谢帮忙啊~…

查看全部问答>

求AD转换芯片推荐

现在想用一个AD芯片作为外设,与DSP2812相连。要求:四路模拟信号输入,12位并行数字信号输出至DSP。求推荐一个满足这个要求的AD芯片。感激不尽! [ 本帖最后由 zjufiber 于 2012-3-15 14:17 编辑 ]…

查看全部问答>

TPS54531输出干扰问题

电路图: 输入电压:7.4V,输出6V ,1A 。用示波器测得输出端波形如下: 这么大的干扰,做出来的电源根本没办法用。大家帮我看看应该怎样解决。 …

查看全部问答>

Cadence设计中的问题

我在用Cadence做电路板时,在原理图中二极管器件是2个引脚的,但是给它添加了一个3脚的封装,然后我就不可以将这个封装拉倒Allegro PCB中,怎样设置才可以将这个三角封装拉倒Allegro PCB中呢?希望大家赐教。…

查看全部问答>