STM32 基础学习——GPIO位结构(江科大老师教程)

2023-09-17 14:39:50

一、GPIO内部结构 

1、GPIO外设名称是由GPIOA、GPIOB、GPIOC等命名,共有16个引脚

2、每个GPIO模块内,主要包含了寄存器驱动器这些东西

3、寄存器写1,对应的端口就是高电平。写0,对应的端口就是低电平

4、寄存器只负责存储数据


这是GPIO结构图,总体来说上半部分是输入部分,下半部分是输出部分

 这是部分是寄存器

寄存器介绍

想要单独控制某一端口而不影响其他端口,需要一些特殊的方式

第一种方式:通过按位与和按位或的方式更改某一位,最后再将数据写回去,C语言中就是 &= 和 |= 的操作      (麻烦、效率低)

第二种方式(主用):设置位设置位清除寄存器,如果需要设置,那么就在位设置寄存器某一位写1。如果需要清除,那么就在位清除寄存器写0。这样内部电路就会帮我们处理

第三种方式:通过寻址的方式,暂时不会用到


Mos管介绍

1、上面是P-MOS,下面是N-MOS。MOS管就是一种电子开关

2、我们的信号来控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS

在这里可以选择推挽、开漏或关闭三种输出方式

1、推挽输出模式下,P-MOS和N-MOS都有效。

(1)数据寄存器位1时,上管导通下管断开,输出直接接到VDD,输出高电平

(2)数据寄存器位0时,上管断开下管导通,输出直接接到VSS,输出低电平

总结:这种模式高低电平都有较强驱动能力,STM32对IO口具有绝对的控制权,高低电平都由STM32说了算

2、开漏输出模式下,P-MOS失效,只有N-MOS工作。

(1)数据寄存器位1时,下管断开,这时输出相当于断开,等于高阻模式

(2)数据寄存器位0时,下管导通,输出直接到VSS,也就是输出低电平

总结:这种模式下只有低电平有驱动能力,高电平没有驱动能力

作用:(i)、可以作为通信协议的驱动方式(比如I2C通信的引脚就是使用开漏模式),在多机通信的情况下,这个模式可以避免各个设备的相互干扰

(ii)、可以用于输出5V的电平信号,比如在IO口外接一个上拉电阻到5V的电源

        当输出低电平时,由内部的N-MOS直接接VSS

        当输出高电平时,由外部的上拉电阻拉高至5V

这样就可以输出5V的电平信号,用于兼容一些5V电平的设备

3、关闭输出模式下

(1)端口的电平由外部信号来控制


这部分是驱动器

一、上拉电阻和下拉电阻

1、VDD和VSS这里对应的是上拉电阻和下拉电阻,开关可以通过程序进行配置

2、如果VDD导通而VSS断开就是上拉模式,反之就是下拉模式。

3、如果都断开那就是浮空模式

4、加这个主要是为了避免引脚悬空导致输入数据不确定,我们就需要在这里加上上拉或者下拉电阻。当引脚悬空,上拉电阻保证引脚高电平,同理下拉保证低电平。

二、肖特基触发器(也可以叫做施密特触发器)

1、对输入电压进行整形,如果输入电压小于某一阈值,输出就会瞬间降为低电平。反之升为高电平

(举例,如图所示)红色为输入电压,绿色为阈值范围,当低于最低阈值则输出低电平,高于最高阈值则输入高电平

这样可以有效的避免因为信号波动造成的输出抖动现象

2、接下来经过肖特基触发器整形的波形就可以直接写入输入数据寄存器了,我们再用程序读入输入数据寄存器对应某一位数据就可以知道端口的输入电平了

1、最后上面还有两路线路(模拟输入和复用功能输入),用来连接到片上外设的一些端口

2、模拟输入是连接到ADC上的,因为ADC需要接收模拟量,所以接到施密特触发器前面

3、复用功能输入,这个是连接到其他需要读取端口的外设上的。比如串口的输入引脚等,这根线接收的是数字量,所以接到了施密特触发器后面

总结:施密特前是模拟量 ,施密特后是01组成的数字量


这部分是IO引脚

1、上方VDD接3.3V,下方VSS接0V。

2、如果输入电压大于3.3V,那么电流就会流入VDD而不会流入内部电路(避免过高电压对电路产生伤害)。

3、如果输入电压小于0V,那么电流会从VSS直接流出去而不会从内部电路吸取电流。

 二、GPIO的八种工作模式

 数字输入


模拟输入

1、这种情况其他全部失效,直接接到了片上外设,这种就是ADC。所以当我们使用ADC的时候,将引脚配置为模拟输入就可以了


数字输入

1、开漏输出和推挽输出

2、复用开漏输出和复用推挽输出

1、与上边基本相同,但是复用的输出引脚电平是由片上外设控制的

总结:一个端口只能由一个输出,但可以有多个输入。所以当配置成输出模式的时候,内部可以顺便输入一下

更多推荐

沉积物微体古生物鉴定

声明本文是学习GB-T42629.4-2023国际海底区域和公海环境调查规程第4部分:海洋沉积物物理特性调查.而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们1范围本文件规定了国际海底区域和公海环境调查中的沉积物组成、物理力学性质、生物扰动、沉积物通量等调查要素,及其调查过程中的样品采集、处理、测试

探讨基于IEC61499开发类似LabVIEW图形编程工具

LabVIEW是一个十分出名的图形化编程工具,与之类似的还有Matlab的Simulink,他们统称为图形化编程语言(GraphicalProgrammingLanguage),另一方面,IEC61499功能块标准也是一种图形化编程工具,它面向分布式工业控制系统。本篇博文讨论一个十分有趣的话题,如何使用IEC61499

Nginx环境搭建、负载均衡测试

Nginx环境搭建、负载均衡测试系统环境:win10,IDEA2020,JDK8一、nginx环境搭建1.ngxin下载Nginx官网下载:http://nginx.org/en/download.htmlNginx有三种版本,分别是Mainlineversion(开发版)、Stableversion(稳定版)、Leg

学习vue3源码

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录1.为什么要学习源码阅读优秀的代码的目的是让我们能够写出优秀的代码不给自己设限,不要让你周围人的技术上限成为你的上限功利性的阅读源码2.源码应该怎么阅读单点突破系统阅读具体方案3.本地怎么调试源码最后1.为什么

【微信小程序开发】宠物预约医疗项目实战-注册实现

【微信小程序开发】宠物预约医疗项目实战-注册实现第二章宠物预约医疗项目实战-注册实现文章目录【微信小程序开发】宠物预约医疗项目实战-注册实现前言一、打开项目文件二、编写wxss代码2.1什么是wxss2.2配置主程序全局样式三.在sign文件下的wxml文件中编写如下代码并保存四.sign.js文件代码编写如下4.1j

【Redis】深入探索 Redis 的数据类型 —— 无序集合 Set

文章目录一、Set类型介绍二、Set类型相关命令2.1添加元素和检查成员2.2移除元素2.3集合运算求交集求并集求差集2.4Set相关命令总结三、Set类型编码方式四、Set使用场景一、Set类型介绍Set(集合)是Redis数据库中的一种数据类型,它是一种无序的、不重复的数据结构,用于存储一组唯一的元素。Set在Re

【PyTorch 攻略 (4/7)】张量和梯度函数

一、说明W在训练神经网络时,最常用的算法是反向传播。在该算法中,参数(模型权重)根据损失函数相对于给定参数的梯度进行调整。损失函数计算神经网络产生的预期输出和实际输出之间的差异。目标是获得尽可能接近零的损失函数的结果。反向传播算法通过神经网络向后遍历,以调整权重和偏差以重新训练模型。这种随着时间的推移重新训练模型的来回

Word2Vec的原理是什么,如何用训练Word2Vec

Word2Vec是一种基于神经网络的词向量生成模型,通过训练预测上下文单词或中心单词来生成词向量。它包含两种不同的架构:跳字模型(Skip-gram)和连续词袋模型(ContinuousBag-of-Words,CBOW),它们在训练方式和结果表现上略有不同。1跳字模型(Skip-gram):在跳字模型中,模型的目标是

ES7新特性深度解析:提升JavaScript开发效率的利器

前言ES7(ECMAScript2016)是JavaScript的最新版本,引入了一些强大的新特性,旨在提升开发者的工作效率。本篇博客将深度解析ES7的一些重要特性,并且以不超过50%的代码比例展示其用法。包含属性初始化器的类(Class)定义ES7允许我们在类的定义中直接初始化属性,而不需要在constructor中

Docker镜像:构建、推送和创建多个容器实例

文章目录步骤1:构建自定义Docker镜像步骤2:推送和拉取Docker镜像步骤3:创建多个容器实例结论🎈个人主页:程序员小侯🎐CSDN新晋作者🎉欢迎👍点赞✍评论⭐收藏✨收录专栏:云计算✨文章内容:Docker镜像🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗Docke

PX4自动控制中常用的几个话题

订阅话题1、/mavros/state订阅/发布:订阅功能:订阅mavros的一些状态数据,如连接状态、是否解锁、当前无人机模式数据类型:mavros_msgs/StatestringMODE_PX4_MANUAL=MANUALstringMODE_PX4_ACRO=ACROstringMODE_PX4_ALTITUD

热文推荐