STM32 (三)GPIO的八种模式及其原理

2023-11-01

一、GPIO简介

GPIO就是通用I/O(输入/输出)端口,是STM32可控制的引脚。
STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。


二、GPIO工作模式.


1. 四种输入模式

    GPIO_Mode_IN_FLOATING 浮空输入模式
    GPIO_Mode_IPU 上拉输入模式
    GPIO_Mode_IPD 下拉输入模式
    GPIO_Mode_AIN 模拟输入模式

2. 四种输出模式

    GPIO_Mode_Out_OD 开漏输出模式
    GPIO_Mode_Out_PP 推挽输出模式
    GPIO_Mode_AF_OD 复用开漏输出模式
    GPIO_Mode_AF_PP 复用推挽输出模式

三、GPIO工作原理解析

1. I/O端口的基本结构框图

 

保护二极管

作用: 防止引脚外部输入过高和过低的电压,防止不正常电压引入芯片,导致芯片烧毁。
当引脚电压高于VDD时,上方的二极管导通。
当引脚电压低于VSS时,下方的二极管导通。
上拉电阻和下拉电阻

作用: 控制引脚默认状态的电压。
开启上拉的时候,引脚默认电压为高电平。
开启下拉的时候,引脚默认电压为低电平。
TTL肖特基触发器

TTL肖特基触发器其实可以理解为用肖特基管构成的施密特触发器。
作用: 将相对缓慢变化的模拟信号变成矩形信号。
当输入电压高于正向阈值电压,输出为高。
当输入电压低于负向阈值电压,输出为低。
P-MOS管和N-MOS管

作用: 使得GPIO具有“推挽输出”和“开漏输出”的模式。
P-MOS管: MCU输出为 1 导通,低电平关闭。
N-MOS管: MCU输出为 0 导通,高电平关闭。
 

3. GPIO工作模式解析

浮空输入模式

浮空输入模式下,I/O端口的电平信号直接进入到输入数据寄存器
MCU直接读取I/O口电平,I/O的电平状态是不确定的,完全由外部输入决定。

 

 如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。 (接用电压表测量其引脚电压为1点几伏,这是个不确定值) 以用来做KEY识别

上拉输入模式

上拉输入模式下, I/O端口的电平信号经过上拉电阻进入到输入数据寄存器。

 

IO内部接上拉电阻,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为高电平  如果I/O口输入低电平,那么引脚就为低电平,MCU读取到的就是低电平

STM32的内部上拉是"弱上拉",即通过此上拉输出的电流是很弱的,如要求大电流还是需要外部上拉。

下拉输入模式

下拉输入模式下, I/O端口的电平信号经过下拉电阻进入到输入数据寄存器。

 

  IO内部接下拉电阻,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为低电平  如果I/O口输入高电平,那么引脚就为高电平,MCU读取到的就是高电平。

模拟输入模式

模拟输入模式下, I/O端口的电平信号不经过TTL肖特基触发器,直接进入ADC模块,并且输入数据寄存器为空 ,MCU不能在输入数据寄存器上读到引脚状态。
在模拟输入模式下,上拉电阻和下拉电阻是不起作用的,即使配置上拉和下拉模式,也不会有作用。

当GPIO引脚用于ADC采集电压的输入通道时,用作"模拟输入"功能,此时信号不经过施密特触发器,直接直接进入ADC模块,并且输入数据寄存器为空 ,CPU不能在输入数据寄存器上读到引脚状态

当GPIO用于模拟功能时,引脚的上、下拉电阻是不起作用的,这个时候即使配置了上拉或下拉模式,也不会影响到模拟信号的输入输出

除了 ADC 和 DAC 要将 IO 配置为模拟通道之外其他外设功能一律 要配置为复用功能模式,
 

开漏输出模式(带上拉或者下拉)

开漏输出模式下, P-MOS管不工作,只有N-MOS管工作,MCU只能控制输出低电平。
MCU输出低电平的时候,N-MOS管导通,I/O引脚输出低电平。
MCU输出高电平的时候,N-MOS管关闭,I/O引脚悬空状态。

 

推挽输出模式

推挽输出模式下, P-MOS管和N-MOS管都工作,MCU可以控制输出高电平和低电平。
MCU输出为 0 的时候,N-MOS管导通,I/O引脚输出低电平。
MCU输出为 1 的时候,P-MOS管导通,I/O引脚输出高电平。

 

复用开漏输出模式

复用开漏输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。

 

复用推挽输出模式

复用推挽输出模式下, GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。

 

三、在STM32中选用IO模式:

     上拉输入、下拉输入可以用来检测外部信号;例如,按键等;
    模拟输入 ——应用ADC模拟输入,或者低功耗下省电
    开漏输出一般应用在I2C、SMBUS通讯等需要"线与"功能的总线电路中。
     推挽输出模式一般应用在输出电平为0和3.3伏而且需要高速切换开关状态的场合。在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式。
    复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
    复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
 

F4系列与F1系列区别:

本质上的区别是F4系列采用了Cortex-M4内核  而F1系列采用Cortex-M3内核

F1系列(M3)IO口基本结构:

 

F4系列(M4)IO口基本结构:

 

F4系列设计的更加高级与人性化,他将外部上下拉电阻转移到了输出/输入驱动器外部,使得输出模式下也可以实现内部上拉与下拉,方便了用户的使用,增加了灵活性
 

四、GPIO的配置方法(cubemx)

1,打开cubrmx ,点击ACCESS TO MCU SELECTCR.

 

2,会进入这个界面,在 part number 处输入单片机的型号,并选取相应的型号

 

3,先点击syssterm core ,再点击sys,参照图上配置

 

4,在右侧的芯片上,寻找所要设置的GPIO,在单击该GPIO后会显示能配置的模式 

 5,在选定模式后点击GPIO进行详细的配置

 

 在这可进行输入\输出的初始电平,输入的开漏,推挽等的设置。

6,进入clock configuration进行时钟树的配置(上一章讲过了)

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

STM32 (三)GPIO的八种模式及其原理 的相关文章

随机推荐

  • Django框架 - 应用命名空间app_name和实例命名空间namespace的区别

    Django框架学习笔记 include 区分app name和namespace 文章目录 前言 app name的两种写法 namespace的写法 namespace默认值 namespace的唯一性 app name的唯一性 结论
  • VMware Linux 可视化增加磁盘

    1 VMware 增加磁盘 2 disks挂载磁盘 此处我挂载的是20G磁盘 截图只是用5G的做过程演示例子 3 验证挂载磁盘
  • Arduino智能物流小车各部分功能代码详解(省工程训练能力综合竞赛)

    文章目录 前言 测试部分 循迹部分 超声波测距部分 避障部分 机械臂控制部分 扫码部分 初赛部分 前言 考虑到之前那篇博客写的太简略 也只给了一个最终代码 比较容易让人看不懂 本篇主要写一些不同功能函数的代码讲解 要看整体部分的请前往我的另
  • QT第五个参数讲解

    二 connect的第五个参数 参数type定义了信号和槽的关联方式 Qt支持6种连接方式 其中3中最主要 1 Qt AutoConnection 自动方式 Qt的默认连接方式 如果信号的发出和接收这个信号的对象同属一个线程 那个工作方式与
  • 第一篇:mysqlcluster数据库集群的搭建和配置

    当系统的规模达到一定程度后 数据库在系统中慢慢成为一个瓶颈 因此需要对数据库进行扩展 数据库集群时一种解决数据库负荷的有效手段 本篇主要是描述了数据库集群如何搭建和配置的过程 一 mysql集群的规划 mysql集群由管理节点 数据节点 m
  • Python 语言对面向对象的支持

    其实许多知识点 我们看似已经熟悉还不能再熟悉 而且有些代码已经成为习惯 因为我们对他们太熟悉了 而忘记问一句为什么会这样写 所以适当抽出时间对一些过往的或者熟悉知识进行整理 可能会有意想不到的收获 Python 语言对面向对象的支持 当初
  • 【PHP】Phpstorm环境配置与应用

    一 Phpstorm环境配置 1 点击左上端File 选择下拉框中的setting 进入环境配置页面 如下图 2 如下图点击1处 选中下拉框中的Deployment Type 图示2处 下拉框中选择Local or mounted fold
  • ADB详解

    文章目录 ADB概述 一 安装与连接 二 常规使用方法 三 Adb shell 四 性能统计dumpsys 五 Monkey工具 ADB概述 ADB Android Debug Bridge 顾名思义 安卓调试桥 是一种功能多样的命令行工具
  • 不同jdk环境导致md5不一致

    加密访问接口 运行jar包发现就导致错误 idea测试没有问题 这还都是在本机运行 单步调试发现出现结果不一致地方出现在以下代码处 MessageDigest sec MessageDigest getInstance MD5 sec re
  • 部门来了个拿25k出来的00后测试卷王,老油条表示真干不过,已被...

    内卷的来源 内卷最早的 出处 是几张名校学霸的图片 大学生们刷爆朋友圈的几张 内卷 图片是这样的 有的人骑在自行车上看书 有的人宿舍床上铺满了一摞摞的书 有的人甚至边骑车边端着电脑写论文 这些图片最早在清华北大的学霸之间流传 之后 边骑车边
  • Linux共享文件夹到windows服务器

    1 安装Samba yum y install samba samba client samba common 2 添加要使用的账号 useradd s sbin nologin username smbpasswd a username
  • 闭眼推荐,9 个不能错过的机器学习数据集

    内容一览 本期整理了 HyperAI超神经官网近期更新的 9 个数据集 涉及人脸识别 姿态估计 自动驾驶三个领域 关键词 人脸识别 姿态估计 自动驾驶 本文首发自微信公众号 HyperAI 超神经 近期 HyperAI超神经官网更新了 30
  • springboot + vue项目本地化部署配置内+外网

    1 项目使用nginx做访问代理 配置如下 内网访问配置 server listen 80 server name 192 168 0 235 client max body size 100M charset koi8 r access
  • 开发Hololens遇到The type or namespace name ‘HandMeshVertex‘ could not be found..

    The type or namespace name HandMeshVertex could not be found are you missing a using directive or an assembly reference
  • C语言——循环控制语句

    文章目录 循环控制语句 for循环控制 1 基本语法 2 注意事项和细节说明 3 练习 1 打印1 100之间所有是9的倍数的整数的个数及总和 使用for完成 2 先死后活的一种编程思想 while循环控制 1 基本语法 2 注意事项和细节
  • 谷歌浏览器如何安装vue调试工具

    下载vue devtools压缩包 git地址 vue devtools 安装环境 将下载的压缩包解压 并通过命令行进入vue devtools master文件夹中 输入安装命令 cnpm install进行安装 编译 输入编译命令 np
  • a-textarea实现自动出现滚动条不能自动伸缩

    deep textarea width 100 height 50px overflow y auto resize none
  • 2023年贵州省职业技能大赛“网络安全” 项目比赛任务书

    2023年贵州省职业技能大赛 网络安全 项目比赛任务书 2023年贵州省职业技能大赛 网络安全 项目比赛任务书 A模块基础设施设置 安全加固 200分 A 1 登录安全加固 Windows Linux A 2 Nginx安全策略 Linux
  • MYSQL数据文件默认在哪个目录下?

    原文地址 MYSQL数据文件默认在哪个目录下 在Windows平台默认一般在C ProgramData MySQL C ProgramData MySQL MySQL Server X X Data文件夹中 无论在Windows还是在Lin
  • STM32 (三)GPIO的八种模式及其原理

    一 GPIO简介 GPIO就是通用I O 输入 输出 端口 是STM32可控制的引脚 STM32芯片的GPIO引脚与外部设备连接起来 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 二 GPIO工作模式 1 四种输入模式 GPIO