历史上的今天
返回首页

历史上的今天

今天是:2025年05月06日(星期二)

正在发生

2018年05月06日 | STM32GPIO口8种模式细致分析(类比51单片机)

2018-05-06 来源:eefocus

关于STM32GPIO口的8种工作模式,我们先引出一些问题?

STM32GPIO口如果既要输入又要输出怎么办?

1、浮空输入模式

 

 

上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时1读出的就是1,外部没有输入IO处于阻塞读不出电平状态。

用处:感觉在信号处理方面用的比较好,比如在读取一段一段的波形,可以清晰的知道什么时候是0信号,什么时候是1信号,什么时候是没有信号的。

类比:51单片机找不到类似的输入模式

 

2、上拉输入

 

上拉输入和浮空输入的区别是,上拉电阻的开关关闭了,如上图所示。IO没有输入的时候,IO电平等于VDD即1电平,当然IO输入低电平的事就是VDD和IO口形成一个闭环电路,根据分压法IO口出分担的电压为0。当然IO输入为1时,IO口电压和VDD相等,上拉电阻好比断开了,IO口的电压还是0。

 

用处:在按键使用的时候特别适用,按键的一端接地,一端接IO口,当按键没有按下的时候电平为高电平,当按键按下的时候IO是低电平。

 

类比:51单片机P1 P2 P3口就是上拉输入的,大家可以回忆一下51单片机的按键操作,我们应该知道51单片机除了P0口内部没有上拉电阻其他的IO都有上拉电阻。大家应该明白了51单片机没有按键的时候,我们读到的事高电平了吧!!

 

小计:

上拉输入,不管输入1还是不输入IO的电平都是1,输入0是IO口的电平是0

PS按键是共地还是共VCC选择的时候要慎重


3、下拉输入

 

 

下拉输入和上拉输入的区别是,上拉电阻的开关打开了了,下拉电阻的开关关闭;了。如上图所示。IO没有输入的时候,IO电平等于VSS即0电平,当IO输入高电平的时候IO口就和VSS组成一个闭合电路,根据分压法,电压都分担到了电阻上,所以IO口电平为高电平。当然IO输入为低电平的时候,IO口肯定是低电平。 

用处:在按键使用的时候特别适用,按键的一端接VCC,一端接IO口,当按键没有按下的时候电平为低电平,当按键按下的时候IO是高电平电平。

 

类比:51单片机没有类似的IO口 

 

PS按键是共地还是共VCC选择的时候要慎重

 

4、模拟输入

 

模拟输入,大家看上图的红色的标示。模拟输入和其他输入最大的区别

1、 没有连接TTL触发器,这样保留最原始的电压值,不是转换过后的0和1信号

2、 数据连接的终点不一样,其他的输入我们都是读取输入寄存器的值,而模拟输入,数据直接送到片上外设,一般是ADC。

 


 下面就是输出类型了

1、 推挽输出

2、 开漏输出

3、 复用推挽输出

4、 复用开漏输出

 


1、推挽输出

 


上图就是就是推挽输出的过程。上图标示的“2”便是我们的输出寄存器,我们可以写入1或者0,如果写入1,图上的“3”上面的P-mos导通,N-mos截止,IO口等价直接连接在VDD上,所以IO口电平是高电平。同理输出寄存器的值为0时,P-mos截止,N-mos导通。IO口直接连接在VSS上,所有IO口电平为低电平。

大家可能会问图上标的1是什么?其实1的寄存器就是间接向输出寄存器写入。好处是有的,大家自己百度哈!!

 

用处:适合做一些开关控制,应为推挽输出可以快速的切换0和1,例如继电器,led等

 

类比:51单片机没有类似的IO口

 


3、 开漏输出

 

上图红色标示便是开漏输出的过程图,图上1和2的标示已经在推挽输出中介绍了,此处不再说明。开漏输出与推挽输出唯一的区别就是开漏输出只有一个N-mos管。当输出寄存器的值为0的时候,n-mos导通,IO口直接连接VSS,输出为低电平。当输出寄存器为1的时候,n-mos截止,IO口直接和输出端断开了,处于浮空状态。电平状态不可控制。

大家可能会说,这样设计不是傻缺么?有什么用设计这种输出方式。其实这种方式很有用的,请看下面的类比

类比:

我们都知道51单片机PO口,是不是想到什么了?对PO口就是类似的开漏输出, PO口作为输出的时候一定要加上拉电阻,加上上拉电阻后,输入寄存器为1的时候,n-mos截止截止了,好比IO和输出端断开,这是IO口点压就等于上拉电阻的电压。这样变输出了高电平,如果IO口的高电平,连接到了外设低电平的,就会产生电流,电流不会流到IO口,(N-mos管截止了)直接流到外设。是不是增大了驱动能力了。(IO口的驱动能力有限,不能容忍大电流)。

通过改变上拉电阻的大小和电压就能完成很多功能。

 


4、 复用(推挽和开漏)输出


复用

 

复用推挽\开漏和(推挽\开漏输出)区别在于起点不一样,复用输出来源片上外设,比如IIC,SPI等。相信大家已经可以理解了,不做解释了。

 

 

大家是不是觉得8中模式都会了呢?我一开始的问题GPIO输入和输出之间的影响?

 

当我们设置为输入模式的时候,看上图“1”和“2”是线与的关系,如何你想要“1”对我们的输入没有影响,要么要“1”断开,要么让“1”高电平。比如键盘检测的时候,如何“1”是低电平的话。那么输入端会一直是低电平。我的开开发板PC5是键盘,如何我对输出端不做任何处理的话,即使我PC5输入设为上拉输入,输入寄存器一直是0。如果直接给ODR寄存器置1我的问题就解决了。

问题1 我没有设置PC5的输出模式,直接给输出寄存器置1,IO口的输出端是什么情况?STM32有没有默认的输出方式,这个要看输出寄存器复位的时候的值,来判断他的工作模式。。总之为了保险起见,应把输出寄存器置1。就和我们用51单片机IO作为输入的时候一定要先置一,一般系统复位后都是一。

 

当我们设置为输出模式的时候,我们能不能读取数据(不设置输入模式),当我们设置为开漏模式的时候,外接上拉电阻过后,我们不用设置输入模式就可以读取IO的电平了。这个是唯一的全双工的方式,除了复用功能外。我猜想默认输入应该是浮空输入。

 

哈哈其实GPIOx_CRX复位后值是0x44444444,即默认的输入是浮空输入模式,输出是推挽输出 !!


推荐阅读

史海拾趣

Everett Charles Technologies (ECT)公司的发展小趣事

ECT一直致力于技术创新和研发,不断推出具有竞争力的新产品。多年来,ECT成功拥有了100多项专利,这些专利不仅涵盖了电子测试系统的各个方面,也体现了公司在技术上的领先地位。通过不断的技术创新,ECT赢得了众多世界知名电子公司及其代工厂的长期合作伙伴关系,进一步巩固了其在行业中的主导地位。

AAC [American Accurate Components]公司的发展小趣事

随着业务的不断发展和规模的持续扩大,AAC公司在2005年成功在香港交易所上市。这一里程碑式的事件为AAC带来了更多的资本支持和市场认可。此后,AAC加快了全球扩张的步伐,不仅在欧洲、北美等地设立了分支机构,还与众多国际知名品牌建立了长期稳定的合作关系。

Atlanta Micro公司的发展小趣事

随着技术的不断进步,Atlanta Micro不断推出创新产品,其中最为引人注目的是其开发的一款高性能RF模块。这款产品采用了先进的材料和技术,具有更高的频率稳定性、更低的噪声和更长的使用寿命。这一创新不仅提升了产品的性能,也满足了客户对更高品质产品的需求,进一步巩固了Atlanta Micro在市场上的地位。

Amveco Toroidal Power Products公司的发展小趣事

随着电子行业的快速发展,客户对环形变压器的性能要求也越来越高。Amveco公司敏锐地捕捉到了这一市场变化,加大了在技术创新和产品升级上的投入。公司研发团队不断攻克技术难关,成功开发出了一系列具有更高效率、更低损耗的环形变压器产品,满足了客户对高性能产品的需求。同时,公司还不断优化生产工艺,提高了产品的可靠性和稳定性。

C-MAC Automotive公司的发展小趣事

在电子行业的早期,C-MAC Automotive公司还是一家名不见经传的小企业。然而,随着电动汽车市场的兴起,公司敏锐地捕捉到了市场机遇。通过投入大量研发资源,C-MAC成功开发出一款高效稳定的电池管理系统,这一技术突破为公司的快速发展奠定了坚实基础。随着产品逐渐获得市场认可,C-MAC的订单量大幅增加,公司规模迅速扩大。

Fortiming Corporation公司的发展小趣事

背景:2001年9月5日,Fortiming Corporation在内华达州正式成立(来源:企查查)。在成立之初,公司就明确了自己的市场定位——专注于提供高质量的石英晶振、晶体振荡器等频率控制产品。

发展:面对当时竞争激烈的电子行业,Fortiming凭借其对技术的深刻理解和对市场需求的敏锐洞察,迅速在石英晶振领域站稳脚跟。公司不仅注重产品研发,还积极引进先进生产设备,提升产品质量和生产效率。

问答坊 | AI 解惑

这种高压电源谁会设计?

输入:AC 220V±10% 输出:DC 40KV 功率:1KW 纹波:90% 要求:短路保护,过流保护,欠压保护,主电路部分给出详细参数及计算过程。     哪位大虾帮帮忙,本姑娘有酬谢.....................…

查看全部问答>

诺奖得主:2030年电脑将可模拟人脑 2050年接近

2008年诺贝尔奖获得者北京论坛第二场主题演讲,昨日在人民大会堂举行。2006年诺贝尔物理学奖得主乔治·斯穆特预测,到2050年可能会有一个智能接近人脑的电脑。 诺奖得主:2030年电脑将可模拟人脑    2008年诺贝尔奖获得者北京论坛第二场 ...…

查看全部问答>

用BCB编的串口通信程序收到的数据和用串口调试助手收到的数据不一样,这是怎么回事?请大家指点!谢谢!

我用C++ Builder 编了一个界面,界面的主要功能是显示串口收到的数据,结果测试发现界面显示的数据隔几组就有几个异常值,但用串口调试助手看就没有异常值,这是为什么啊?请大家指点一下。…

查看全部问答>

求问动态的UI

看到有些手机上的menu菜单并不是在一下子出现 而是一个个出现 感觉很不错 你可以制造成任意的形状出现的形式 (flash中可以实现) 这个在GDI是怎么实现啊? 谢谢 …

查看全部问答>

s3c6410 usb 发送缓冲内的数据全变成0了

我给s3c6410做了个usb otg驱动,配置成device,向PC机传输数据。端点1,bulk in,向PC传输。端点2 bulk out,接收pc的数据。 如果先启动接收线程,再启动发送线程,ok 如果先启动发送线程,再启动接收线程,每次传输N个包,则接收到的第一个包全 ...…

查看全部问答>

stm32f200的第一个demo硬件估计今天可以搞定原理图

不过可能还需要问st要一些参考设计。 这个评估硬件的原理图可以公开,只是因为原先versaloon项目计划里有一个手持式的平台。我这里暂时使用这个来评估F200的芯片。 versaloonHandy_Preview.pdf (310.29 KB) 下载次数: 169 201 ...…

查看全部问答>

error: can\'t allocate .text ?

本帖最后由 dontium 于 2015-1-23 13:35 编辑 >>   error: can\\\'t allocate .text, size 00001f6e (page 0) in PRAMH0 (avail:             00001000) >>   error: erro ...…

查看全部问答>

是我看错了,还是写错了!

论坛上面TI联接里的PDF (选择指南:TI 基于 ARM® 技术的处理器) 第3页:您知道吗? Sitara™ ARM Cortex™-A8 微处理器 (MPU) 堪称业界性能 最高的单内核 MPU,拥有 1.56 MHz、3000 DMIPS 的系统 性能。 是1.56 MHz还是1.56 ...…

查看全部问答>

晒设计方案+STM32F429简单介绍(笔记)

本帖最后由 IC爬虫 于 2013-12-27 10:58 编辑 从收到STM32F429I-Discovrey到现在每天都有玩点,现在在做自己喜欢风格的各种外设的驱动,也做了很多的笔记。 为了有始有,先介绍一下STM32F429ZIT6.:有2MB的Flash(以1MB为一片,分成两片),256kBDE ...…

查看全部问答>