03:【stm32】GPIO

news2025/1/23 10:39:08

GPIO

  • 1、芯片的引脚分布
  • 2、IO复用与重映射
  • 3、片上外设GPIO
    • 3.1、GPIO的寄存器组
    • 3.2、8种工作模式
    • 3.3、最大输出速度
    • 3.4、GPIO的内部结构

1、芯片的引脚分布

   STM32F103C8T6这款芯片一共有48个引脚,他们分为了特殊功能引脚和普通的IO引脚。其中特殊功能的引脚有如下几个:
在这里插入图片描述
如图:被红色框住的就是特殊功能的引脚,包括了3个供电引脚,晶振,复位,下载,启动配置。而被黑色框住的就是普通功能引脚,未被特化,可编程。

  • 其中普通功能引脚一共有35个,我们将他分为3组:分别为PA,PB,PC。其中PA(0~15)一共16个引脚,PB(0~15)一共16个引脚,PC(13~15)一共3个引脚。我们通过编程实现这35个引脚实现输入输出进而实现需要的功能。

在这里插入图片描述
如STM32F103C8T6的最小系统板的引脚图所示,其中被红色框住的就是普通的引脚IO口,用于编程。

2、IO复用与重映射

   如最小系统板的引脚功能图所示。引脚分为通用功能,复用功能,和重映射功能。

  • 通用功能时:引脚就是一个普通的IO口,由芯片CPU直接控制它的输入/输出高电平/低电平。

  • 复用功能时:不同的引脚连接着不同的片上外设,一个引脚可能连接着多个片上外设。例如使用串口通信时(USART1),就要使用PA9和PA10。使用定时器TIM1时,也要使用PA9和PA10。所以,一个引脚可能连接着多个片上外设。
    在这里插入图片描述

  • 重映射时:当我们同时要使用USART1和TIM1时,他们都在PA9和PA10引脚上面,所以我们需要将一个片上外设重映射到另外的引脚上面去,例如我们打开PB6和PB7的重映射功能,就是USART1。这样就能同时使用USART1和TIM1了。

在这里插入图片描述

3、片上外设GPIO

3.1、GPIO的寄存器组

   GPIO是控制引脚输入输出的片上外设,有GPIOA,GPIOB,GPIOC等等。芯片CPU和其他的片上外设与GPIO连接之间存在着GPIO寄存器,通过配置这些寄存器来控制IO引脚。

在这里插入图片描述
如图:GPIO寄存器有配置寄存器,一共有16个格子对应一组的16个引脚,每个格子用于配置一个引脚的参数,具体是什么不用了解。

  • 输入寄存器IDR:它也是16个格子,对应的是一组的16个引脚,例如:如果IDR的最低位是0,则代表Px0引脚输入的是低电平。

  • 输出寄存器ODR:它也是16个格子,对应的是一组的16个引脚,例如,给寄存器最低位写入1,则代表Px0引脚的输出高电平。

3.2、8种工作模式

   GPIO一共有8种工作模式,分别为输出推挽,输出开漏,复用推挽,复用开漏。上拉输入,下拉输入,浮空输入,模拟输入。

在这里插入图片描述

  • 输出推挽模式
    在这里插入图片描述
    如图:程序写1时:上面的开关闭合,下面的开关打开,上面PMOS导通,输出一个高电平。
       程序写0时:上面的开关打开,下面的开关闭合,上面NMOS导通,输出一个低电平。
    总结:程序写1,输出高电平。程序写0,输出低电平。(程序写入,也就是写入输出寄存器ODR)

  • 输出开漏模式
    -

如图:开漏模式时,上面的PMOS一直都是断开的状态。
当程序写0时:下面的NMOS闭合,输出一个低电平。
当程序写1时:下面的NMOS也断开,引脚输出是一个高阻抗状态。

  • 上拉输入模式
    在这里插入图片描述
    当工作在上拉模式时:上拉电阻的开关闭合,下拉电阻开关断开。
    当IO端口输入0时:寄存器IDR读取为0
    当IO端口输入1时:寄存器IDR读取为1
    当IO端口悬空时: 寄存器IDR读取为1
  • 下拉输入模式
    当工作在下拉模式时:上拉电阻的开关断开,下拉电阻开关闭合。
    当IO端口输入0时:寄存器IDR读取为0
    当IO端口输入1时:寄存器IDR读取为1
    当IO端口悬空时: 寄存器IDR读取为0
  • 浮空输入模式
    当工作在浮空模式时:上拉电阻的开关断开,下拉电阻开关断开。
    当IO端口输入0时:寄存器IDR读取为0
    当IO端口输入1时:寄存器IDR读取为1
    当IO端口悬空时: 寄存器IDR读取不确定,容易被外部电磁波干扰
  • 模拟输入模式
    主要作用于片上外设ADC(模数转换)

3.3、最大输出速度

   最大输出速度:IO允许输出电平的最大切换频率。当输出寄存器写1时,引脚不会立马变为高电平,它有个缓冲时间。写0时也是同理。当我们给输出寄存器交替写0和1时,这个交替时间太快,小于缓冲时间时。则引脚就不能够正常的输出电平。所以t(输出电平切换时间)>t(缓冲时间)。
在这里插入图片描述
而stm32的最大输出速度有3个挡位:2MHZ,10MHZ,50MHZ。一般频率最大,输出速度就越快,功耗就越大。
在这里插入图片描述

3.4、GPIO的内部结构

在这里插入图片描述
红色框里面的寄存器是IO输入部分,蓝色框里面的寄存器是IO输出部分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一键搬运TEMU、SHEIN店铺起新店。商品一键复制,商品裂变,TEMU商品复制

店铺搬家,一键搬运TEMU、SHEIN店铺起新店。商品一键复制,裂变新类目。铺店群必备 店铺搬家是什么? 店铺搬家就是将Temu一个店铺的所有商品快速搬到另一个店铺,只需要半个小时就能起一个全新的店铺,可以帮助商家快速起新…

comfyUI-MuseTalk的参数设置

comfyUI-MuseTalk的参数设置 目录 comfyUI-MuseTalk的参数设置 一、ComfyUI-VideoHelperSuite 二、comfyUI-MuseV合成的参考视频 2.1、什么时候会用到MuseV? 2.2、MuseV特别消耗系统内存 2.2.1、测试图片序列的像素比 2.2.2、影响运动范围和生成结果的参数 …

无法安装Python包,出现OSError: 拒绝访问错误

无法安装Python包,出现OSError: 拒绝访问错误 在安装Python包时,可能会遇到各种错误,其中“OSError: 拒绝访问”是一个比较常见的问题。这个错误通常表明在安装过程中,Python没有足够的权限去访问某个文件或目录。本文将深入探讨…

【LeetCode】45.跳跃游戏II

1. 题目 2. 分析 很久没有写贪心的题了,在这题上卡了很久时间,我这个还是不会贪心。 核心思想就一句话:维护在到达本次最远位置之前能达到的最远位置。每到边界时就更新步数,便得到正确答案。 3. 代码 class Solution:def jum…

微软商店无法加载,检查你的连接-解决方案

微软商店默认直连国内的服务器。 如果有代理,关闭代理就可以恢复网络了。 但是我就是想用代理,我感觉代理更快, 搜索了很多办法,都没有生效。 然后我在哔哩哔哩的视频下方,看到大家留言,测试了一下&#x…

Qt/C++项目积累: 2.主机监控器 - 2.3 实时数据及其他功能完善

相关链接: 链接1:Qt/C项目积累: 2.主机监控器 - 2.1 项目介绍-CSDN博客https://blog.csdn.net/qq_22122811/article/details/140254896 链接2:Qt/C项目积累: 2.主机监控器 - 2.2 历史功能实现-CSDN博客https://blog.…

ARM 架构硬件新趋势:嵌入式领域的未来

目录 目录 一、ARM 架构概述 二、新趋势一:AI 加速器集成 三、新趋势二:更高效的电源管理 四、新趋势三:安全性增强 五、结语 随着物联网 (IoT) 和边缘计算的发展,ARM 架构在嵌入式系统中的应用越来越广泛。从智能手机到智能…

STM32H7无RTOS应用堆栈机制与检测

摘要:单片机堆栈溢出会引发不可预知的错误。本文探讨了基于STM32CubeIDE设置STM32H7xx堆栈在无RTOS时的使用与检测方法。 一、堆栈的设置 STM32CubeIDE对工程设置堆栈很简单,在CubeMX中设置最小size如下图 堆(Heap)为0x400&#…

低空经济-低空智联网技术体系白皮书

目录 低空定义 低空政策 低空市场规模 低空应用场景 通信需求 监管需求 低空智联网技术体系 低空定义 低空经济是指在3000米以下,以低空空域为依托,以各种有人和无人驾驶航空器的低空飞行活动为牵引,辐射带动相关领域融合发展的综合性…

【MySQL是怎样运行的 | 第三篇】MySQL的MVCC机制

文章目录 3.MySQL的MVCC机制3.1前言3.2undo log日志3.3三个隐藏字段3.4undo log版本链3.5当前读VS快照读3.6ReadView3.7举例3.7.1RC(读已提交)3.7.2RR(可重复读) 3.8扩展:RR能解决幻读问题吗? 4.白云 3.MyS…

【Python系列】深入理解 Python 中的 `nonlocal` 关键字

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

进程状态(二)----- linux 中具体的进程状态(上)

目录 前言1. R 状态2. S 状态3. D 状态 前言 继上一篇文章 进程状态(一)---- 运行,阻塞,挂起 介绍了操作系统都有的三个进程状态,而这篇文章则是将进程状态具象化,谈论具体到 linux 系统中的进程状态都有哪…

Geoserver源码解读七 插件(二)扩展图层预览界面

系列文章目录 Geoserver源码解读一 环境搭建 Geoserver源码解读二 主入口 Geoserver源码解读三 GeoServerBasePage Geoserver源码解读四 REST服务 Geoserver源码解读五 Catalog Geoserver源码解读六 插件(怎么在开发模式下使用) 目录 系列文章目录…

vector中 resize()和reserve()

1.resize()改变容器大小 resize除了预留内存以外,还会调用容器元素的构造函数,不仅分配了N个对象的内存,还会构造N个对象。从这个层面上来说,resize()在时间效率上是比reserve()低的。 2.reserve()容器大小管理 用于预留内存。 …

【Linux】shell命令与Linux权限的概念

目录 一、shell命令二、Linux权限的概念2.1 Linux权限的概念2.1.1 用户2.1.2 指令2.1.2.1 su指令2.1.2.2 sudo指令 2.2 Linux权限管理2.2.1 文件访问者的分类(人)2.2.2 文件类型和访问权限(事物属性)2.2.2.1 文件类型2.2.2.2 基本…

C++ 中迭代器的first和second

c 里面的map容器的迭代器里面 有个first 和 second&#xff0c;分别指向键值和数值 it.first就是在迭代器中获取map键值&#xff0c;it.second同理 #include<iostream> #include<map> using namespace std;int main(void){map<string, string> m;//新建一个m…

lower_bound函数和upper_bound函数

lower_bound 和 upper_bound 函数都是 C 标准库算法&#xff0c;用于在已排序的范围内查找元素。它们返回的是迭代器&#xff0c;指向满足特定条件的元素位置。 lower_bound(begin, end, val) 功能&#xff1a;返回指向第一个不小于 val 的元素的迭代器。含义&#xff1a;如果…

如何快速下载拼多多图片信息,效率高

图片是电商吸引顾客的关键因素&#xff0c;高质量的商品图片能提升产品吸引力&#xff0c;增强用户购买欲望。良好的视觉展示有助于建立品牌形象&#xff0c;提高转化率。同时&#xff0c;图片也是商品信息的主要传递媒介&#xff0c;对消费者决策过程至关重要。 使用图快下载器…

Linux内核有什么之块设备驱动有什么第七回 —— 邂逅的三个文件系统之二:实际文件系统(4)

接前一篇文章&#xff1a;Linux内核有什么之块设备驱动有什么第六回 —— 邂逅的三个文件系统之二&#xff1a;实际文件系统&#xff08;3&#xff09; 本文内容参考&#xff1a; 《Linux设备驱动开发详解 —— 基于最新的Linux4.0内核》 宋宝华&#xff0c;机械工业出版社 3…

奥运会大规模使用中国AI大模型!

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 AI圈最近又发生了啥新鲜事&#xff1f; 巴黎奥运会大规模使用中国 AI 大模型 巴黎奥运会成为一场科技与体育的盛宴&#xff0c;其中包括了大量中国科技的应用。AI 技术将在多个方面发挥作用&#xf…