STM32的GPIO端口配置八种模式的理解

2023-05-16

文章目录

  • 一、GPIO的结构框图
  • 二、八种模式
    • 1. 模拟输入(GPIO_Mode_AIN)
    • 2. 浮空输入(GPIO_Mode_IN_FLOATING )
    • 3. 上拉输入(GPIO_Mode_IPU)
    • 4. 下拉输入(GPIO_Mode_IPD )
    • 5. 开漏输出( GPIO_Mode_Out_OD )
    • 6. 推挽输出( GPIO_Mode_Out_PP )
  • 复用功能
    • 7. 复用开漏输出 ( GPIO_Mode_AF_OD )
    • 8. 复用推挽输出( GPIO_Mode_AF_PP )
  • 总结


一、GPIO的结构框图

在这里插入图片描述
在这张图中,GPIO的配置可以分成8种模式,4种输入,4种输出。

输入分为:模拟输入、浮空输入、上拉输入、下拉输入

输出分为:开漏输出、推挽输出、复用推挽输出、复用开漏输出

二、八种模式

1. 模拟输入(GPIO_Mode_AIN)

在这里插入图片描述
模拟输入,一般情况下,用于ADC的采集电压时,配置的输入IO口。在模拟输入中,TTL肖特基触发器以及上拉电阻和下拉电阻都处于关闭状态。即使配置上拉或下拉模式,不会影响到模拟信号的输入输出。


2. 浮空输入(GPIO_Mode_IN_FLOATING )

在这里插入图片描述

浮空输入,IO的电平状态是不确定的,完全由外部输入决定,如果该引脚悬空的情况下,读取该端口的电平是不确定的,有可能是高电平,也有可能是低电平。


3. 上拉输入(GPIO_Mode_IPU)

在这里插入图片描述
上拉输入,将一个不确定的信号,通过一个电阻与电源VCC相连,固定在高电平,IO口为高电平。
在上拉输入中接入了一个电阻,它的作用是为了确保信号输入时输入端的电平为高电平。


4. 下拉输入(GPIO_Mode_IPD )

在这里插入图片描述
下拉输入,将一个不确定的信号,通过一个电阻与地GND相连,固定在低电平,IO口为低电平。
与上拉输入同理,在下拉输入中接入了一个电阻,它的作用是为了确保信号输入时输入端的电平为低电平。


5. 开漏输出( GPIO_Mode_Out_OD )

在这里插入图片描述
开漏输出,在这个模式下,是能够输出低电平,但无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。同时,P-MOS管是处于关闭的,N-MOS管是开启的。当输出寄存器的值为0的时候,N-MOS管导通,此时IO口的电平被N-MOS管拉到VSS,输出为低电平。当输出寄存器为1的时候,N-MOS管截止,IO口直接和输出端断开了,处于浮空状态。


6. 推挽输出( GPIO_Mode_Out_PP )

在这里插入图片描述
推挽输出,它的P-MOS管和N-MOS管是打开的状态,当输出寄存器的值为0的时候,N-MOS管导通,此时IO口的电平被N-MOS管拉到VSS,输出为低电平。当输出寄存器为1的时候,P-MOS管导通,此时IO口的电平被P-MOS管拉到VDD,输出为高电平。简单点讲就是想输出高电平,就输出高电平,想输出低电平,就输出低电平。

开漏输出和推挽输出的区别:开漏输出只有N-MOS管是开启的,P-MOS管是关闭的。


复用功能

可以理解为普通的GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用),复用功能模式中,一般直接用外设的寄存器来获取该数据信号。

7. 复用开漏输出 ( GPIO_Mode_AF_OD )

在这里插入图片描述
复用开漏输出模式,与开漏输出模式很是相似。只是输出的高低电平的来源不同,不是让CPU写输出数据寄存器了,而是用片内外设模块的复用功能输出来决定的。复用开漏输出中的片内外设功能(TX1,MOSI,MISO.SCK.SS)。


8. 复用推挽输出( GPIO_Mode_AF_PP )

在这里插入图片描述
同理,复用推挽输出模式,与推挽输出模式也是相似。输出的高低电平的来源不同,不是让CPU写输出数据寄存器,而是利用片内外设模块的复用功能输出来决定的。复用推挽输出中的片内外设功能(I2C的SCL,SDA)。

总结

以上就是我关于STM32中配置GPIO的八种模式的理解,谢谢观看。

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

STM32的GPIO端口配置八种模式的理解 的相关文章

随机推荐

  • ubuntu下切换python版本(python2与python3之间的切换,python3与python3之间的切换)

    目录 1 问题2 重装python3 83 配置 python3 8 为系统默认 python34 切换回系统自带的python3 1 问题 有点无语 xff0c python3 8明明下载安装好 但是设置python默认版本为python
  • Ubuntu22.04中解决mNetassist无法打开问题

    因为本人在安装mNetassist遇到很多问题 xff0c 也是查找了很多资料 xff0c 最终解决了问题 因为每个人遇到的问题会有所不同 xff0c 故把本人的安装经历记录下来 xff0c 以供参考 大家可参考的文章是这篇 xff0c 但
  • C++中常用的库函数 (自用)

    常用的库函数 一 前言二 内容1 sort 题目 2 upper bound 与lower bound 题目 3 to string 4 string 内嵌的 find 函数 注 xff1a vector无find 函数5 大小写转换 to
  • 四轴飞行器PID调参建议

    在动态控制中 xff0c 我们通过调整PID三个参数来获得动力 xff0c 同时消除振荡 xff0c 找到对你当前的飞行场景来说更优的手感 P xff08 Propotional xff09 是比例的简称 P 单元控制着控制系统的所有动力
  • C语言string库strcpy、strcmp、strcat函数详解

    strcpy 即string copy 语法格式为strcpy str1 str2 作用是将str2赋值给str1 使用方法类似于 char str1 10 str2 61 34 abc 34 strcpy str1 34 bcd 34 s
  • VScode常用快捷键、

    VScode常用快捷键 xff1a 英文 按回车enter xff1a 会快速打出html 后缀名 自行填写 shift xff0b alt xff08 鼠标放在复制行代码区 xff0c 或者鼠标选择区域 xff09 按控制 向下 键 xf
  • 深入了解运行时栈(C语言)

    文章目录 运行时栈函数的栈帧寄存器与机器指令寄存器 xff1a 机器指令 程序计数器控制转移数据传送参数的传递返回值的传递 举例 xff1a 函数栈帧创建和销毁的全过程小结 运行时栈 栈是一种数据结构 xff1a 我们可以向这种结构中存入数
  • 小四轴调试记录

    从准备理论到实际动手调试大约耗时半年吧 xff0c 期间看了很多理论知识 xff0c 惯性导航方面的文章 至于为什么选择从小四轴入手 xff0c 当时的理由很简单 xff1a 1 便宜 xff0c 2 空心杯电机虽然有刷会坏但便宜 xff0
  • 登录 账号密码验证

    lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta http equiv 61 34 X U
  • 关于C++变量重复定义

    本人是刚入学的大一计算机类学生 xff0c 最近在学习C 43 43 xff0c 在回顾这个代码时候发现 xff0c 这个重复定义i和j会导致之前定义的全局变量i和j并不能起作用 xff0c 现在还不太清楚为什么 xff0c 请小伙伴们注意
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b
  • 链表的概念以及相关基础操作

    前言 xff1a 链表是数据结构里面最开始的章节 xff0c 也是对新手的理解有困难的第一章 笔者大二下学校才开设数据结构 xff0c 以防自己忘记 xff0c 遂记录之 链表的概念 xff1a 链表是一种物理存储单元上非连续 非顺序的存储
  • Sqoop数据导入 第2关:Mysql导入数据至HDFS上

    为了完成本关任务 你需要掌握 1 数据库 MySQL 建表 2 Mysql 数据导入至 HDFS 中 数据库 MySQL 建表 用命令进入 MySQL 客户端 mysql uroot p123123 h127 0 0 1 创建数据库hdfs
  • 一、单链表创建以及操作

    链表操作全内容 xff1a 1 xff0c 链表创建 2 xff0c 创建头结点 xff08 赋值 xff09 3 xff0c 输出当前链表 4 xff0c 连接节点形成链表 5 xff0c 插入节点函数 6 xff0c 删除节点函数 7
  • STL常用的容器

    STL常用容器 目录 STL常用容器vector容器pair c 43 43 内置二元组 不需要头文件stringqueue 队列priority queue 优先队列stack 栈deque 双端队列 速度异常的慢set map mult
  • Ubuntu网页连接失败的解决方法

    问题如下 xff1a 一 首先你要先检查自己的Ubuntu是否能连接上网络 二 在确保自己能连接上网络时 xff0c 网页连接失败的原因可能是你的Firefox浏览器的默认搜索引擎时Google xff0c 只需要在网页设置 搜索 中将搜索
  • Hal库_stm32开发之串口IDLE空闲中断+DMA接收不定长数据并修改数据

    本文写自于博主编写平衡智能车程序的时候 xff0c 由于中断使用的较多 xff0c 如定时器中断 xff0c 串口中断等等 为了避免MCU运行程序时卡死 xff0c 我就将串口中断改为串口IDLE空闲接收中断 可以实现不定长数据的接收 xf
  • PCB学习(一)——立创EDA边框设置

    一 伴随原理图转PCB生成的边框 通过在 原理图界面 点击 设计 下的 原理图转PCB xff08 Alt 43 P xff09 xff0c 可以得到如下 矩形边框 二 PCB界面设置边框 在 PCB界面 点击 工具 下的 边框设置 xff
  • c++模板类/模板函数的声明与定义应该放在头文件里

    c 43 43 模板类 模板函数的声明与定义应该放在头文件里 xff0c 不要分开来写类中函数的声明与定义 xff08 比如在 H文件里声明某个成员函数 xff0c 在 CPP文件里定义该成员函数 xff09 xff0c 这样会导致连接错误
  • STM32的GPIO端口配置八种模式的理解

    文章目录 一 GPIO的结构框图二 八种模式1 模拟输入 xff08 GPIO Mode AIN xff09 2 浮空输入 xff08 GPIO Mode IN FLOATING xff09 3 上拉输入 xff08 GPIO Mode I