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,即默认的输入是浮空输入模式,输出是推挽输出
!!
STM32GPIO口8种模式细致分析(类比51单片机)的更多相关文章
- stm32 IO口八种模式区别
初学STM32,遇到I/O口八种模式的介绍,网上查了一下资料,下面简明写出这几种模式的区别,有不对的地方请大家多多指正! 上拉输入模式:区别在于没有输入信号的时候默认输入高电平(因为有弱上拉).下拉输 ...
- android中MVC,MVP和MVVM三种模式详解析
我们都知道,Android本身就采用了MVC模式,model层数据源层我们就不说了,至于view层即通过xml来体现,而 controller层的角色一般是由activity来担当的.虽然我们项目用到 ...
- 深入探究stm32GPIO口模式(类比51)
关于STM32GPIO口的8种工作模式,我们先引出一些问题? STM32GPIO口如果既要输入又要输出怎么办? 1.浮空输入模式 上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时 ...
- (转)深度分析Linux下双网卡绑定七种模式
现在一般的企业都会 使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在 网卡产商也会出一些针对window ...
- 深度分析Linux下双网卡绑定七种模式 多网卡的7种bond模式原理
http://blog.csdn.net/abc_ii/article/details/9991845多网卡的7种bond模式原理 Linux网卡绑定mode共有七种(~) bond0.bond1.b ...
- 深度分析Linux下双网卡绑定七种模式
现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在网卡产商也会出一些针对windows操 ...
- 三种工厂模式的分析以及C++实现
三种工厂模式的分析以及C++实现 以下是我自己学习设计模式的思考总结. 简单工厂模式 简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型, ...
- C2B电商三种主要模式的分析_数据分析师
C2B电商三种主要模式的分析_数据分析师 在过去的一年中电商领域血雨腥风,尤其是天猫.京东.苏宁.当当.易讯等B2C电商打得不亦乐乎.而随着B2C领域竞争进入白热化阶段,C2B模式也在天猫" ...
- activity的四种启动模式详细分析
1.android中通过任务队列来管理activity 采用栈的结构就是后进先出 手机里面如果启动多个应用就会启动多个任务栈来管理对应的activity. 主要解决下面的问题:对应的四种启动模式: 1 ...
随机推荐
- asp.net MVC4总结
MVC4构建例子 新建MVC4项目 在项目工程下面的App_Data文件夹下面添加新建项->数据-> Sql server 数据库文件Movies.mdf 新建movies.cs模型类 ...
- linux下apache 的安装
1.进入work目录下:cd /usr/local/work(如没有则自己新建,命令:mkdir /usr/local/work) 2.在woke目录下从网站下载apache并解压:wget http ...
- 四色GDOI&GDOI2015滚粗记
好吧自己太弱写不了什么四色NOI只能学学别人写个四色GDOI了...首先自己还是太弱所以就被学校卡了个名额就进不了省队了QAQ.自己GDOI觉得考得不错可是NOIP毕竟少了人家5分根本追不上去好不QA ...
- Linux内核时间管理(二)——jiffies与jiffies_64释疑
Linux内核中定义了jiffies变量来记录从系统启动到当前时刻系统时钟所产生的tick数.jiffies变量是一个无符号整型数值,即unsigned long类型.它的声明如下(在 include ...
- SVN服务搭建
yum方式搭建: 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创 ...
- linux系统端口查看和占用的解决方案
使用netstat命令查看端口占用情况 netstat -tln 查看什么程序占用端口 netstat -tlnp 过滤端口 netstat -tlnp |grep 8080 杀掉进程 kill - ...
- mysql 添加登录用户
一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指 ...
- 过程 : 概念 : 结构 jobbox jobPost
概念是employer创建jobPost时,可以publish或unpublish. sort expired后,会通过server tast 去更新成history.所有的publish和unpub ...
- 2017.3.3自测j纠错题.
解析: 在jUery中,他的背景颜色依次是红色,绿色,蓝色. 改变的是整个主体部分.<dody></body>. 单击. 2. 解析: 操作元素: html() 获取第 ...
- 《类型编程晋级——shapeless类库使用指南》前言及第一章翻译
从年初开始进行此项工作,我和合作伙伴包亮付出了大量而艰辛的劳动,现基本翻译完毕,有出版意向,如果有意向欢迎联系,不甚感激!也欢迎各位博友对此翻译提出意见建议以及指导如何出版,在此谢过! 前言 时间回到 ...