当前位置: 首页 > news >正文

03:【stm32】GPIO

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输出部分

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【STM32】“stm32f10x.h” 头文件的作用
  • iPhone怎么大批量删除照片:释放你的存储空间
  • 【第十天】进程和线程的区别 并行和并发有什么区别 解释一下用户态和核心态
  • C语言初阶(11)
  • 元组(tuple)—数据容器
  • 常见的MySQL数据库面试题
  • 样本熵与近似熵:度量时间序列复杂性的方法
  • 2024 NVIDIA开发者社区夏令营环境配置指南(Win Mac)
  • 【过题记录】8.4(robocom补题,网络流)
  • Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记
  • 一款好用的开源网站内容管理系统
  • Matplotlib中用于绘制垂直线的函数axvline的参数介绍
  • 什么是提示词注入攻击
  • 读零信任网络:在不可信网络中构建安全系统07设备信任
  • 网络编程相关
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • IDEA常用插件整理
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • MySQL-事务管理(基础)
  • Spring Cloud中负载均衡器概览
  • SQLServer之索引简介
  • 动态规划入门(以爬楼梯为例)
  • 关于 Cirru Editor 存储格式
  • 简单数学运算程序(不定期更新)
  • 码农张的Bug人生 - 初来乍到
  • 小程序 setData 学问多
  • 一个项目push到多个远程Git仓库
  • puppet连载22:define用法
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​如何防止网络攻击?
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • %check_box% in rails :coditions={:has_many , :through}
  • (C语言)共用体union的用法举例
  • (C语言)逆序输出字符串
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (四)图像的%2线性拉伸
  • (学习总结16)C++模版2
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)iOS字体
  • (转)jdk与jre的区别
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ***监测系统的构建(chkrootkit )
  • .net core Swagger 过滤部分Api
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 通过 Ef Core 操作 Mysql
  • .Net Core 中间件验签
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args