stm32IO口八种工作模式详细解析(附原理图)

2023-05-16

目录

  • 工作模式介绍
  • 常用IO口工作模式分析
  • 实际应用

很多小伙伴们在初学stm32时都对stm32的IO口工作模式的原理和配置不了解,所以我整理发表此篇文章作为自己复习和他人参考资料。(注:该文章参考了stm32官方数据手册和正点原子教学资料)

在Cortex-M3里对于GPIO的配置种类有8种之多,4种输入模式,4种输出模式:

(1)GPIO_Mode_AIN 模拟输入

(2)GPIO_Mode_IN_FLOATING 浮空输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_IPU 上拉输入

(5)GPIO_Mode_Out_OD 开漏输出

(6)GPIO_Mode_Out_PP 推挽输出

(7)GPIO_Mode_AF_OD 复用开漏输出

(8)GPIO_Mode_AF_PP 复用推挽输出

(一)、IO口工作模式介绍

下面我将对各种模式的作详细介绍:

(1)浮空输入模式:
在这里插入图片描述

浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。所以在要读取外部信号时通常配置IO口为浮空输入模式。

(2)上拉输入模式:在这里插入图片描述

上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在I/O端口输入为低电平的时候,输入端的电平为低电平。

(3)下拉输入模式:
在这里插入图片描述

下拉输入模式下,IO口工作方式刚好和上拉模式相反。I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在I/O端口输入为高电平的时候,输入端为高电平。

(4)模拟输入模式:

在这里插入图片描述

模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等等。

(5)推挽输出模式:
在这里插入图片描述

推挽输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,控制P-MOS管和N-MOS管的导通来控制IO口输出高电平还是低电平。这里要注意P-MOS管和N-MOS管,当设置输出的值为1的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的电平就由P-MOS管决定为高电平;当设置输出的值为0的时候,P-MOS管处于关闭状态,N-MOS管处于开启状态,此时I/O端口的电平就由N-MOS管决定为低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,此时I/O端口的电平一定是输出的电平。

(6)复用推挽模式
在这里插入图片描述

推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

(7)开漏输出模式:在这里插入图片描述

开漏输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,控制MOS管的导通。这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平。通常使用开漏输出时外部要加一个上拉电阻。

(8)复用开漏输出模式:在这里插入图片描述

开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

(二)、常用IO口模式分析

对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总结:

1、推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

详细理解:

推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。

2、开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).

开漏形式的电路有以下几个特点:

a. 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。

b. 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)

c. OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

d. 可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。

e.补充:什么是“线与”?:

在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS), 晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.

其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

3、浮空输入:对于浮空输入,由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。

(三)实际应用

(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1

(2)带上拉输入_IPU——IO内部上拉电阻输入

(3)带下拉输入_IPD—— IO内部下拉电阻输入

(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电

(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能

(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的

(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)

(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

STM32设置实例

(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);

(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;

通常有5种方式使用某个引脚功能,它们的配置方式如下:

1)作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。

2)作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。

3)作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。

4)作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。

5)作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。

喜欢单片机开发的同学可以关注我,持续更新更多技术文章

(本人才疏学浅,如有错误希望各位指正)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32IO口八种工作模式详细解析(附原理图) 的相关文章

  • 数字信号处理实验(一)

    实验目的 本次实验目的为 xff1a 在matlab环境下产生几种基本的数字信号 xff0c 并对这些基本的信号进行运算和变换 xff0c 同时利用程序结果对采样定理进行验证 xff0c 深刻理解采样定理 通过自己录制音频信号并对不同的音频
  • 数字图像处理实验(二)

    实验目的 实验一 xff1a 图像增强 了解图像增强的目的及意义 xff0c 加深对图像增强的感性认知 1 掌握直接灰度变换的图像增强方法 2 掌握灰度直方图的概念及其计算方法 3 掌握直方图均衡化合直方图规定化得计算过程 实验二 xff1
  • 信息论实验-信源编码2(Lz编码和算数编码的C++实现)

    上一篇文章给出了Huffman编码和Shannon Fano编码的编码原理以及C 43 43 的程序 xff0c 程序可以用来实现给任意类型的文件进行无损压缩 xff0c 缺点是比较耗时 xff0c 不能作为正常的通用压缩软件来使用 xff
  • 信息论实验-二元对称信道仿真(C++实现)

    二元对称信道模拟器 实验目的 加深理解二进制对称信道的工作原理 xff0c 掌握通过高级编程语言生成伪随机数的方法 允许使用编程语言 xff1a C xff0c C 43 43 等 实验要求 输入 xff1a BSC信道的错误概率 xff0
  • OpenCV 安装必看

    怎样安装OpenCV套件呢 xff1f 想要使用opencv的同学一定是刚刚接触到图像处理 xff0c 需要做一些实验 xff0c 听说OpenCV很好用 xff0c 所以就开始查找各种资料学习OpenCV但是 xff0c 谁告诉你们它很好
  • make: *** No rule to make target `menuconfig'. Stop.问题解决方案-Linux(3)

    前言 本问题是我在编译更新内核时所遇到的 xff0c 已经解决 问题描述 在编译内核时 xff0c 运行make menuconfig 时出现 xff0c 截图如下 这个是因为没有找到要配置的文件 解决方案 进入解压得到的Linux原文件夹
  • 深入理解AlexNet网络

    AlexNet 论文 xff1a ImageNet Classification with Deep Convolutional Neural Networks 第一个典型的CNN是LeNet5网络结构 xff0c 但是第一个引起大家注意的
  • Ubuntu 18.04 网络配置

    坑爹的网络配置 ubuntu 18 04的网络配置的方式相较于原来的版本有了很大的改动 xff0c 并且server版的和Desktop 版本的是不一样的 Server版本 新的版本采用了netplan 管理网络 xff0c 在命令行中配置
  • PCA原理

    PCA 各位 xff0c 久违了 xff5e 什么是PCA xff1f 什么是PCA呢 xff1f 这是一个问题 xff0c 什么样的问题 xff1f 简单而又复杂的问题 xff0c 简单是因为百度一下就会出现一大堆的解释 xff0c 复杂
  • SRAM驱动开发实例

    一 我写博客的原因 xff0c 应该说是有两点吧 xff08 1 xff09 一点是对阶段性工作的总结 xff0c 虽说技术创新 xff0c 技术创新 xff0c 但在创新之前有一个技术积累的过程 xff0c 写博客 xff0c 便于总结
  • 互补滤波器

    互补滤波器 从 RC 电路 到 数字滤波器 参考 xff1a wikiPedia by luoshi006 原理 低通滤波器 一阶低通滤波器 传递函数 常见的 RC 电路构成的一阶低通滤波器的输入 U 输出 Y 关系如下 xff1a Y U
  • mahony 互补滤波器

    by luoshi006 上接 互补滤波器 xff0c 继续学习互补滤波 参考 xff1a Keeping a Good Attitude A Quaternion Based Orientation Filter for IMUs and
  • PX4 - position_estimator_inav

    by luoshi006 参考 xff1a 1 http dev px4 io advanced switching state estimators html 2 http blog sina com cn s blog 8fe4f2f4
  • PX4-terrain_estimator

    by luoshi006 参考 xff1a https github com PX4 Firmware blob master src lib terrain estimation terrain estimator h PX4 位置估计中
  • 已归档博文收纳

    by luoshi006 欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a L类 Learning GitHub Qt5 5 1 43 OpenCV2 4 10 环境配置PX4 开发环境 xff08 Ubuntu14
  • linux信号量

    1 信号量数据结构 union semun int val 整形变量 信号量初值 struct semid ds buf semid ds结构指针 unsigned short array 数组类型 struct seminfo buf 信
  • 单片机系统中的一种文字平滑(抗锯齿)显示方法

    这是之前一个项目中已实现的方法 xff0c 现在整理后拿出来分享 单片机系统中文字显示部分一般用的是用取模软件取出字模后输出到屏幕上显示 xff0c 这种方式显示的字体有锯齿 xff0c 在DPI低的显示屏上锯齿效果非常明显 对于单色屏来说
  • DIY个人智能家庭网关—— 路由器篇之刷机

    先选择合适的路由器型号 xff0c 要求有两个 xff0c 一 xff1a 有USB口 xff0c 二 xff1a 可以刷openwrt系统 xff0c 我的首选是newifi mini xff0c 比较喜欢折腾的可以刷openwrt官方固
  • 类中的域

    转自http book 51cto com art 201207 350797 htm 类的对象也称为这个类的实例 当创建一个对象时 xff0c 对象包含在类定义中包括的所有域 但是 xff0c 类定义中的域并不总是一样 一共有两种 有一种
  • Postman 插件介绍

    Postman介绍 Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求 xff0c 并能运行测试用例的的Chrome插件 其主要功能包括 xff1a 模拟各种HTTP requests 从常用的 GET POST

随机推荐

  • 【2022阿里灵犀互娱】游戏测开笔试AC_Code

    测开笔试 xff0c 90分钟 xff0c 3道编程题 43 八股 xff0c 第二题输出格式模拟题 xff0c 就不贴了 T1 进制转换 题意 有一个数 xff0c 可能是2 xff5e 16进制的其中之一 xff0c 算出所有可能的结果
  • error while loading shared libraries: libopencv_imgcodecs.so.3.4

    最近给电脑重新安装了opencv3 4 10 xff0c 但是跑工程时却出现这个问题 xff0c 网上百度了一堆 xff0c 发现应该是库设置的问题 xff0c 但是到底是哪里出了问题 xff0c 怎么设置 xff0c 我根据我自己的实际情
  • 六、geotrellis按时间序列存储至hbase

    实现代码如下 xff1a import org apache camel scala dsl builder RouteBuilderSupport import geotrellis raster import geotrellis pr
  • 支持向量机svm及python测试

    from sklearn svm import SVR SVC from sklearn datasets import load boston from sklearn datasets import load wine from skl
  • mlp神经网络及python测试

    关于线性模型 xff1a y 39 61 w 0 x 0 43 w 0 x 0 43 43 w p x p 43 b 其中 xff0c y 39 表示对y的估算值 xff0c x 0 到x p 是样本特征值 w表示每个特征值的权重 xff0
  • linux 安装gdal(含hdf)记录

    一 准备工作 经实践 xff0c 在其他用户下存在某种问题 xff0c 可能是对Centos系统上不熟悉 xff0c 无法解决 xff0c 需在root用户下安装 xff09 xff1a su root 安装编译环境 sudo yum in
  • go语言多线程与并发编程

    go语言并发编程 在了解go语言的并发编程之前 xff0c 我们必须先了解并发和并行的概念 我们知道 xff0c 当启动一个应用的时候实际上是启动了一个进程 xff0c 通过该进程实现资源的调度和分配 xff0c 并且多个进程之间是相互隔离
  • Pycharm 中Available packages nothing to show

    国内源 xff1a 清华 xff1a https pypi tuna tsinghua edu cn simple 阿里云 xff1a http mirrors aliyun com pypi simple 中国科技大学 https pyp
  • 以太坊区块链的区块(Block)结构

    这里以以太坊区块链为基础进行讲解 直接看代码 xff1a 区块结构代码 xff1a block go 1 block的header type Header struct ParentHash common Hash 96 json 34 p
  • go语言连接mongodb数据库

    使用mongodb数据库之前需要先下载安装mongodb服务器端程序 xff0c 这里不再赘述 go语言下使用mongodb步骤如下 xff1a 1 下载mongodb连接驱动mgo 命令行下输入 xff1a go get gopkg in
  • 算法中的常用数学公式

    1 指数 指数是幂运算a a 0 中的一个参数 xff0c a为底数 xff0c n为指数 xff0c 指数位于底数的右上角 xff0c 幂运算表示指数个底数相乘 当n是一个正整数 xff0c a 表示n个a连乘 当n 61 0时 xff0
  • hbase出现org.apache.hadoop.hbase.PleaseHoldException: Master is initializing错误解决

    使用hbase创建namespace和table时提示该错误 xff0c 完整的错误日志如下 xff1a 按照网上的解决思路 xff1a 1 设置主机之间的NTP时间同步 2 修改hbase site xml配置文件 lt property
  • windows下hadoop的部署和使用

    本教程在windows10环境下安装配置hadoop 43 hbase 43 spark 一 下载压缩包 xff1a 1 JavaJDK xff0c 1 8以上 2 Hadoop2 8 3 xff0c 下载地址 xff1a http arc
  • 四、geotrellis发布TMS服务

    本章节将上一章节创建的瓦片发布为TMS服务 本章节将使用akka建立http服务并访问影像瓦片 使用maven构建测试案例 xff0c maven参见上一章节 具体代码如下 xff1a import geotrellis raster im
  • Pyspark实战(四)pyspark操作hbase

    环境配置 xff1a Spark 启动环境中添加 hbase 的 jar 包以及 spark examples的jar包 1 下载spark examples jar包 xff0c 地址https mvnrepository com art
  • 五、geotrellis实现栅格切片并存储至hbase

    部署环境可以参考本栏目的其他章节 1 maven代码如下 xff1a lt dependencies gt lt dependency gt lt groupId gt org apache camel lt groupId gt lt a
  • launch文件和package文件语法

    launch文件语法 参考 xff1a ROS入门之 浅谈launch 沐棋的博客 CSDN博客 roslaunch 补充 xff1a launch prefix 61 command prefix roslaunch 命令 的一个潜在的缺
  • ORB_SLAM2新增稠密建图代码笔记

    接上一篇博客 ORB SLAM2 43 kinect稠密建图实战项目总结 ORB SLAM2 43 kinect稠密建图实战项目总结 好好仔仔的博客 CSDN博客 本篇在此基础上对整个项目的逻辑结构以及代码实现进行梳理 orb slam2新
  • windows下C++学习推荐书籍

    推荐几本书给你们 xff0c 有空可以学习一下 xff1a C 43 43 编程相关 xff1a 1 C 43 43 Primer xff1a C 43 43 的工具书 2 Effective C 43 43 xff1a C 43 43 提
  • stm32IO口八种工作模式详细解析(附原理图)

    目录 工作模式介绍常用IO口工作模式分析实际应用 很多小伙伴们在初学stm32时都对stm32的IO口工作模式的原理和配置不了解 xff0c 所以我整理发表此篇文章作为自己复习和他人参考资料 xff08 注 xff1a 该文章参考了stm3