STM32GPIO口8种模式细致分析(类比51单片机)

关于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,即默认的输入是浮空输入模式,输出是推挽输出

!!

时间: 2024-10-12 08:56:05

STM32GPIO口8种模式细致分析(类比51单片机)的相关文章

stm32 IO口八种模式区别

初学STM32,遇到I/O口八种模式的介绍,网上查了一下资料,下面简明写出这几种模式的区别,有不对的地方请大家多多指正! 上拉输入模式:区别在于没有输入信号的时候默认输入高电平(因为有弱上拉).下拉输入模式:区别在于没有输入信号的时候默认输入低电平(因为有弱下拉).浮空输入模式:顾名思义也就是输入什么信号才是什么信号,对于浮空输入要保证有明确的输入信号. 开漏输出模式:当写1时,输出不被激活,电平无变化,只有外部加个上拉电阻,输出端口才为1 当写0时,输出为0. 所以如果外部有上拉电阻的话,写1

android中MVC,MVP和MVVM三种模式详解析

我们都知道,Android本身就采用了MVC模式,model层数据源层我们就不说了,至于view层即通过xml来体现,而 controller层的角色一般是由activity来担当的.虽然我们项目用到了MVP模式,但是现在人们并没有总结出一种规范,所以MVP模式的写法并不统一,而至于MVVM模式看网上的呼声似乎也是赞同和拍砖的参半,所以对于这几种模式我也不发表意见了,适合自己的才是最好的.下面是我看到的关于这几种模式的几篇文章,整合了一下分享给大家. ----------------------

深入探究stm32GPIO口模式(类比51)

关于STM32GPIO口的8种工作模式,我们先引出一些问题? STM32GPIO口如果既要输入又要输出怎么办? 1.浮空输入模式 上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时1读出的就是1,外部没有输入IO处于阻塞读不出电平状态. 用处:感觉在信号处理方面用的比较好,比如在读取一段一段的波形,可以清晰的知道什么时候是0信号,什么时候是1信号,什么时候是没有信号的. 类比:51单片机找不到类似的输入模式   2.上拉输入 上拉输入和浮空输入的区别是,上拉电阻的开关关闭了,

深度分析Linux下双网卡绑定七种模式

现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在网卡产商也会出一些针对windows操作系统网卡管理软件来做网卡绑定(windows操作系统没有网卡绑定功能 需要第三方支持).进入正题,linux有七种网卡绑定模式:0. round robin,1.active-backup,2.load balancing (xor), 3.fault-tolerance (broadcast),

深度分析Linux下双网卡绑定七种模式 多网卡的7种bond模式原理

http://blog.csdn.net/abc_ii/article/details/9991845 多网卡的7种bond模式原理 Linux网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0:平衡负载模式,有自动备援,但需要"Switch"支援及设定. mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援. mode=6:平衡负载模式,有自动备援,不必"Switc

正则表达式的三种模式【贪婪、勉强、侵占】的分析

假定要分析的字符串是xfooxxxxxxfoo 模式.*foo (贪婪模式): 模式分为子模式p1(.*)和子模式p2(foo)两个部分. 其中p1中的量词匹配方式使用默认方式(贪婪型). 匹配开始时,吃入所有字符xfooxxxxxx去匹配子模式p1.匹配成功,但这样以来就没有了字符串去匹配子模式p2.本轮匹配失败:第二轮:减少p1部分的匹配量,吐出最后一个字符, 把字符串分割成xfooxxxxxxfo和o两个子字符串s1和s2. s1匹配p1, 但s2不匹配p2.本轮匹配失败:第三轮,再次减少

activity的四种启动模式详细分析

1.android中通过任务队列来管理activity 采用栈的结构就是后进先出 手机里面如果启动多个应用就会启动多个任务栈来管理对应的activity. 主要解决下面的问题:对应的四种启动模式: 1.界面1去启动界面2,在界面2中再去启动界面1,是新创建一个界面1的实例,还是使用后来栈中的已经存在的实例,这就和界面1的设置的模式有很大的关系. 标准的模式:每次去调用都会产生一个新的实例,比如当前activity,你在当前的activity中点击按钮再创建当前的activity,在任务栈就会存在

小米、华为与联想,背后隐含的三种模式(转)

1 月 15 号参加了小米产品发布会,正当雷军在台上讲小米 Note 的种种功能时我却突然意识到小米.华为.联想的拼杀到了 2015 年已经完全进入到了一个新的阶段.在功能和体验上诚然大家会激烈的彼此追赶但其实已经拉不开太多的距离,最终决定胜负的很可能是手机背后所体现出来的模式.这很像一场国战,胜负不再取决于一城一地而是取决于综合国力. 小米.华为与联想背后隐含的商业模式 虽然最终呈现给用户的手机是类似的,但就我看来这三家背后隐含的模式却是有本质不同. 联想是经典的经营管理派.这一派的基本逻辑是

企业服务的3种模式:On-Premise、SaaS、Mixed,该选哪种?--创业邦

B轮融资二三事 我们从9月份开始启动B轮融资,与这些颇具洞察力的投资人聊天,是非常有挑战的事.他们的很多观点充满智慧,能帮你突破思考局限,受益良多.当然,整个过程虽然有趣但也不轻松,毕竟你的目的是完成融资. 第一个麻烦就是A股七八月份的大跳水.A股大盘从5100点跌落到2900点,很多机构和散户亏损严重,这大幅动摇了国内投资机构的信心.开启B轮融资时,我们对一家跟踪公司长达一年的基金充满信心,认为拿Termsheet是十拿九稳.然而,在交流之后的第三天,他们给回的反馈是今年只保老Case不投新C