stm32之GPIO电路介绍

news/2024/10/25 18:26:03/

文章目录

      • 1 GPIO介绍
      • 2 GPIO的工作模式
        • 2.1 浮空输入
        • 2.2 上拉输入
        • 2.3 下拉输入
        • 2.4 模拟输入
        • 2.5 开漏输出
        • 2.6 推挽输出
        • 2.7 复用开漏输出
        • 2.8 复用推挽输出
        • 2.9 其他
      • 3 应用方式
      • 4 常用库函数

1 GPIO介绍

请添加图片描述

  • 保护二极管:保护引脚,让引脚的电压位于正常的范围
  • 施密特触发器:将外部的模拟信号转换为数字信号
  • 上/下拉电阻:通过控制开关,可以设置输入引脚的默认电平状态
  • 输入数据寄存器:外部引脚电平转换为数字信号后保存到输入数据寄存器,然后由内部处理器读取
  • 输出数据寄存器:内部处理器将数据写入输出数据寄存器,然后通过输出控制电路输出到外部引脚
  • 位设置/清除寄存器:该寄存器用于修改输出数据寄存器中的某一位的值

2 GPIO的工作模式

2.1 浮空输入

请添加图片描述

数据流向:电压直接由GPIO引脚通过施密特触发器转化为高低电平后,将数据存储到输入数据寄存器中,微处理器就可以读取输入寄存器的数据。

特点:处于该模式的GPIO口未接外设,处于悬空状态时,引脚的电平是不确定的,此时读取输入寄存器的值是不确定的。

2.2 上拉输入

请添加图片描述

与浮空输入的区别在于,上拉输入模式下,上拉电阻上方的开关会闭合,I/O端口的电压就会Vdd小一点,也就是说,当引脚属于悬空状态时,引脚默认是高电平。

数据流向:与浮空输入相同。

特点:当输入引脚悬空时,输入是高电平。

2.3 下拉输入

请添加图片描述

与浮空输入的区别在于,上拉输入模式下,上拉电阻上方的开关会闭合,I/O端口的电压就会Vss大一点,也就是说,当引脚属于悬空状态时,引脚默认是低电平。

数据流向:与浮空输入相同。

特点:当输入引脚悬空时,输入是低电平。

2.4 模拟输入

请添加图片描述

浮空输入、上拉输入、下拉输入模式下,输入的都是数字信号,而模拟输入是直接将外部的模拟信号输入,因此,上拉电阻、下拉电阻、施密特触发器的开关都会断开,输入引脚的电平直接到内部。

数据流量:外部端口引脚直接连接到内部进行模拟输入。

特点:用于模拟信号的输入。

注意:只有ADC和DAC需要将IO端口配置为模拟通道,其他外设功能需要将IO配置为复用功能模式。

2.5 开漏输出

请添加图片描述

数据流向:处理器将数据写入输出数据寄存器,写入过程中可以通过位设置/清除寄存器(BSRR)修改单个位的数据,输出数据寄存器中的数据通过输出控制电路,然后通过N-MOS管到达外部输出引脚。同时,外部引脚的电平还可以通过浮空输入模式读取。

特点:当输出数据0时,N-MOS管导通,输出低电平;当输出数据1时,N-MOS管截止,输出引脚为高阻态(如果需要输出高电平,需要外接上拉电阻)。

2.6 推挽输出

请添加图片描述

特点:当输出数据0时,输出低电平;当输出1时,输出高电平。开关速度快,负载能力强,是最常使用的输出模式。

2.7 复用开漏输出

请添加图片描述

特点:与开漏输出的区别是,复用开漏输出是从片上外设输出。

2.8 复用推挽输出

请添加图片描述

特点:与推挽输出的区别是,复用推挽输出是从片上外设输出,串口通信中经常使用复用推挽输出。

2.9 其他

上电复位后,GPIO引脚默认为浮空状态,部分特殊引脚为特定状态。

3 应用方式

  • 普通GPIO输入:配置引脚为浮空输入、上拉输入、下拉输入,不使能该引脚的复用功能模块。
  • 普通GPIO输出:配置引脚为推挽输出、开漏输出,不使能该引脚的复用功能模块。
  • 模拟输入:配置引脚为模拟输入,不使能该引脚的复用功能模块。
  • 内置外设的输入:配置该引脚为浮空输入、上拉输入、下拉输入,使能该引脚的复用功能模块。
  • 内置外设的输出:配置该引脚为复用推挽输出、复用开漏输出,使能该引脚的复用功能模块。

注:常规使用GPIO时,输出通常使用推挽输出,输入则使用上拉输入或者下拉输入,具体需要根据外部器件的电路确定。

4 常用库函数

  • GPIO_Init:初始化
  • GPIO_ReadInputDataBit/GPIO_ReadInputData:读取某个口的输入电平,实际读取的就是输入数据寄存器的值
  • GPIO_ReadOutputDataBit/GPIO_ReadOutputData:读取某个口的输出电平,实际读取的就是输出数据寄存器的值
  • GPIO_SetBits:设置某个口输出高电平,实际操作的是位设置寄存器
  • GPIO_ResetBits:设置某个口输出低电平,实际操作菜单是位清除寄存器

http://www.ppmy.cn/news/1389202.html

相关文章

【蓝桥杯】蓝桥杯嵌入式——题目总结及文章汇总(内含客观题与主观题,并且都附有详细题解)

介绍 蓝桥杯嵌入式比赛是一项专注于嵌入式开发的全国性比赛,旨在鼓励和促进嵌入式系统的研究和应用,提高嵌入式开发的水平和技能。 比赛分为初赛和复赛两个阶段。初赛难度适中,注重考查参赛选手的嵌入式系统开发能力和实践经验。复赛则采用线…

反射 Reflection

反射 反射的概念 反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到加载完类之后,在堆中就产生了一个Class类型…

java数据结构与算法刷题-----LeetCode135. 分发糖果

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 左右遍历2. 进阶:常数空间遍历,升序降…

业务服务:redisson

文章目录 前言一、配置1. 添加依赖2. 配置文件/类3. 注入redission3. 封装工具类 二、应用1. RedisUtils工具类的基本使用 三、队列1. 工具类2. 普通队列3. 有界队列(限制数据量)4. 延迟队列(延迟获取数据)5. 优先队列&#xff08…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《含光储充的配网虚拟电厂二次调频随机模型预测控制策略 》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

记录C++中,子类同名属性并不能完全覆盖父类属性的问题

问题代码&#xff1a; 首先看一段代码&#xff1a;很简单&#xff0c;就是BBB继承自AAA&#xff0c;然后BBB重写定义了同名属性&#xff0c;然后调用父类AAA的打印函数&#xff1a; #include <iostream> using namespace std;class AAA { public:AAA() {}~AAA() {}void …

將SqlServer表創建到hive腳本

將SqlServer表創建到hive腳本 sqlserver.java import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern;public class sqlserver {private static String[] deleteArrayNull(String string[]) {ArrayList<String> strList new A…

如何利用机器学习和Python编写预测模型来预测设备故障

预测设备故障是机器学习和数据科学的一个常见问题&#xff0c;通常可以通过以下几个步骤来解决&#xff1a; 1. 数据收集 首先&#xff0c;需要收集与设备运行相关的数据&#xff0c;包括&#xff1a; 设备的历史数据环境数据&#xff08;如温度、湿度等&#xff09;使用时间…