前言:本笔记为百问网7天物联网智能家居训练营学习总结

GPIO(General-Purpose IO ports,通用输入/输出接口),用于感知外界信号(输入模式)和控制外部设 备(输出模式),如图 所示的STM32F103C8T6芯片四周的细引脚就是GPIO。

在嵌入式开发中,经常需要用到一些外部功能模块,比如LED、按键、蜂鸣器、温度传感器等,这些外 设模块都比较简单,只需要MCU的GPIO与模块连接,控制引脚输出/读取高低电平即可。还有一些外部功能 模块,需要多个引脚构成的“协议”进行通信,比如UART、I 2 C、SPI接口等。 如今的MCU大都采用引脚复用技术,即一个GPIO,即可以直接控制其输出高低电平,也可以设置为某 个协议的引脚之一,比如I 2 C的时钟信号引脚SCK。此外,有些MCU的引脚,还能设置为ADC模式读取模拟 信号,或者设置为DAC模式输出模拟信号,本章主要针对引脚的GPIO模式讲解。 对于GPIO模式,不同的MCU的功能细节略有差异,比如STM32的GPIO可以设置输出速度,51单片机就 没有该功能。因此本章主要针对STM32的GPIO特性进行讲解。

STM32F103C8T6一共有48个引脚,除去电源引脚、晶振时钟引脚、复位引脚、启动选择引脚、程序下 载引脚(大部分为最小系统必须引脚),剩下的则是GPIO引脚。 STM32将这些众多按GPIOx(x为A、B、C等)分组,每组包含16个引脚,编号为0~15。STM32F103C8T6 只有2组GPIO,每组16个引脚,即32个GPIO引脚。

下图为STM32F103系列GPIO的基本结构,左侧连接MCU内部,中间上半部分为输入,中间下半部 分为输出,右侧为MCU引出的外设I/O引脚。

GPIO 工作模式

STM32F103系列的I/O引脚共有8种工作模式,其中输出模式有四种:推挽输出、开漏输出、复用推挽 输出、复用开漏输出;输入模式有四种:上拉输入、下拉输入、浮空输入、模拟输入。

推挽输出(Push-Pull,PP)

推挽结构由两个MOS管按互补对称的方式连接,任意时刻总是其中一个三极管导通,另一个三极管截 止。如图 8.1.1 中①所示,内部由一个P-MOS管和一个N-MOS管组成,两个MOS管的栅极(Gate,G)接到 了左侧“输出控制”,漏极(Drain,D)接到外部输出,P-MOS管的源极(Source,S)接到VDD(3.3V), N-MOS管的源极接到Vss(0V)。 MOS管作为开关使用,“输出控制”向两个MOS管栅极加一定电压,P-MOS管源极和漏极之间导通, VDD 经过P-MOS管的S->G->D输出,N-MOS管处于高阻态(电阻很大,近似开路),整体对外为高电平; “输出控制”取消向两个MOS管栅极施加电压,P-MOS管源极和栅极截止,P-MOS管处于高阻态,N-MOS 管源极和漏极导通,整体对外为低电平。 推挽模式,让“输出控制”变为了VDD/Vss输出,使得输出电流增大,提高了输出引脚的驱动能力,提高 了电路的负载能力和开关的动作速度。

开漏输出(Open-Drain,OD)

开漏模式下,“输出控制”不会控制P-MOS管,“输出控制”只会向N-MOS管栅极加一定电压,两个 MOS管都处于截止状态,两个漏极处于悬空状态,称之为漏极开路。“输出控制”取消栅极的施加电压,PMOS管依旧处于高阻态,N-MOS管导通,整体对外为低电平。 开漏输出模式可以等效将图 8.1.2 中灰色框的P-MOS管看作不存在。即该模式下只能输出低电平,若要 输出高电平,则需要外接电阻,所接的电阻称为上拉电阻,此时输出电平取决于此时上拉电阻的外部电源电 压情况,如图 8.1.2 中蓝色框的外部电路。

推挽输出模式可以直接输出高电平,开漏输出模式需要外接上拉电阻才能输出高电平,但开漏输出拥有 一些推挽输出不具有的特性: ①利用外部电路驱动能力。如图 8.1.2 所示,“输出控制”只需要提供一个很小的栅极驱动电流,VCC 经过上拉电阻为外部负载提高驱动电流; ②实现电平转换。推挽输出模式由VDD提供,即只能提供3.3V电平。使用开漏输出模式后,VCC可以为 5V,从而实现了电平转换的效果。 ③方便实现“逻辑与”功能。多个开漏的引脚可以直接并在一起使用,统一接一个合适的上拉电阻,就 可以实现“逻辑与”关系,即当所有引脚均输出高电平时,输出才为高电平,若任一引脚输出低电平,则输 出低电平。在I 2 C、SMBUS等总线电路中经常会用到。

复用功能推挽/开漏输出(Alternate Function,AF)

GPIO引脚除了作为通用输入/输出引脚使用外,还可以作为片上外设(USART、I 2 C、SPI等)专用引脚, 即一个引脚可以有多种用途,但同一时刻一个引脚只能使用复用功能中的一个。 当引脚设置为复用功能时,可选择复用推挽输出模式或复用开漏输出模式,在设置为复用开漏输出模式 时,需要外接上拉电阻。

上拉输入模式(Input Pull-up)

如图 8.1.1 中②所示,VDD经过开关、上拉电阻,连接外部I/O引脚。当开关闭合,外部I/O无输入信号 时,默认输入高电平。 该模式的典型应用就是外接按键,当没有按键按下时候,MCU的引脚为确定的高电平,当按键按下时 候,引脚电平被拉为低电平。

下拉输入模式(Input Pull-down)

如图 8.1.1 中②所示,Vss经过开关、下拉电阻,连接外部I/O引脚。当开关闭合,外部I/O无输入信号时, 默认输入低电平。

浮空输入模式(Floating Input)

如图 8.1.1 中②所示,两个上/下拉电阻开关均断开,既无上拉也无下拉,I/O引脚直接连接TTL肖特基 触发器,此时I/O引脚浮空,读取的电平是不确定的,外部信号是什么电平,MCU引脚就输入什么电平。MCU 复位上电后,默认为浮空输入模式。

模拟输入模式(Analog mode)

如图 8.1.1 中②所示,两个上/下拉电阻开关均断开,同时TTL肖特基触发器开关也断开,引脚信号直接 连接模拟输入,实现对外部信号的采集。

GPIO 输出速度

STM32的I/O引脚工作在输出模式下时,需要配置I/O引脚的输出速度。该输出速度不是输出信号的速度, 而是I/O口驱动电路的响应速度。 STM32提供三个输出速度:2MHz、10MHz、50MHz。实际开发中需要结合实际情况选择合适的相应速 度,以兼顾信号的稳定性和低功耗。通常,当设置为高速时,功耗高、噪声大、电磁干扰强;当设备为低速 时,功耗低、噪声小、电磁干扰弱。 通常简单外设,比如LED灯、蜂鸣器灯,建议使用2MHz的输出速度,而复用为I 2 C、SPI等通信信号引 脚时,建议使用10MHz或50MHz以提高响应速度。

STM32F103系列GPIO的一些基本概念和知识相关推荐

  1. STM32F103系列GPIO重映射一览表

    以下是STM32F103系列GPIO重映射一览表,参考一位博友的文章,大家学习!

  2. stm32f103系列GPIO

    GPIO是通用输入/输出端口的简称,是STM32可控制的引脚.GPIO的引脚与外部硬件设备连接,可实现与外部通讯.控制外部硬件或者采集外部硬件数据的功能. 1,GPIO的输入模式(四种) 1.输入浮空 ...

  3. 学习和理解STM32F103系列芯片的地址映射和寄存器映射原理;了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)。

    ​​ 目录 一:什么是寄存器 1. 2. 二.程序设计思路 1.GPIO模式 2.存储器空间 3.存储器映射 4.寄存器操作 三.GPIO寄存器 STM32 GPIO口的工作模式: 四.总结: ​​​ ...

  4. 简单聊下STM32F103的GPIO

    GPIO是芯片和外界沟通的桥梁,GPIO有很多模式,不同的模式有不同的配置,应用于不同的场合. STM32F103系列的I/O引脚共有8种工作模式, 输入模式有四种 浮空输入 上拉输入 下拉输入 模拟 ...

  5. STM32F103系列芯片的地址和寄存器映射原理、LED轮流闪烁实现

    STM32F103系列芯片的地址和寄存器映射原理.LED轮流闪烁实现 文章目录 STM32F103系列芯片的地址和寄存器映射原理.LED轮流闪烁实现 1 51单片机和STM32的不同点 2 寄存器 2 ...

  6. STM32F103系列芯片原理学习以及LED灯的点亮

    一.STM32F103系列芯片的地址映射和寄存器映射原理 1.寄存器 寄存器是中央处理器内的组成部分.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址. 其实,寄存器就是存放东西的东 ...

  7. STM32F103系列_OLED屏幕(SSD1306、SSD1315驱动)SPI驱动【DMA】(高刷)

    STM32F103系列_OLED屏幕(SSD1306.SSD1315驱动)SPI驱动[DMA](高刷) 一.SSD1306和SSD1315 二.电路原理图(SPI接法) 三.STM32_SPI 四.S ...

  8. STM32F103系列_串口Usart收发函数

    STM32F103系列_串口Usart收发函数 常见问题: 串口第一个字节丢失? 串口不稳定? 串口调用英文数字没问题,但中文乱码? 串口调用与TIM冲突,卡住? 代码 Usart.c Usart.h ...

  9. 嵌入式系统原理及应用《基于ARM Cortex-M3 内核的STM32F103系列微控制器》思维导图

    嵌入式系统原理及应用 <基于ARM Cortex-M3 内核的STM32F103系列微控制器>课程思维导图 目录 第一章 嵌入式系统概论 第二章 嵌入式系统开发 第三章 ARM Corte ...

最新文章

  1. php image mask,PHP GD使用一个图像来遮蔽另一个图像,包括透明度
  2. 窗体DataGridView控件中按回车键时,单元格向下移动,如何能改成向右移动
  3. 关于appstore多语言版本,不可不看!
  4. Docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. ...
  5. endnote文献顺序编号不对_把Endnote装进大脑:行走的文献管理者
  6. xcom2.0_发布Xcom 2,Elliot Quest,Mesa图形库以及更多开放式游戏新闻
  7. mysql一张表可以用吗_MySQL表操作
  8. 关于 Google 发布的 JS 代码规范
  9. Directx教程(28) 简单的光照模型(7)
  10. 计算机编程 常用术语英语词汇大全 记忆
  11. 揭开银行U盾的秘密---签发CA证书:单向认证+双向认证(含java代码)
  12. 一篇文章带你搞懂DEX文件的结构
  13. Cannot find current proxy: Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available
  14. 201809-4 再卖菜 ccf
  15. python节日贺卡图片大全_简单漂亮三年级新年贺卡图片大全
  16. 二维码之zxing二维码解析图片资源
  17. #include<set>头文件的用法
  18. 华为机考108题(c++)(101-108)
  19. 解决“c#:未将对象引用设置到对象的实例”
  20. 利用IntelliJ IDEA与Maven开始你的Scala之旅

热门文章

  1. 阿里云独享虚拟主机和共享虚拟主机区别对比
  2. GSM Foxit Reader
  3. Hackintosh相关资源站
  4. pythoncanny边缘检测自适应阈值_基于python实现自适应阈值的canny边缘检测
  5. python延时函数 微秒_Python程序可显示当前时,分,秒和微秒
  6. 火车头 采集 java 生成正文_火车头采集器使用教程–采集内容发布规则设置
  7. 【编程语录】59条令人捧腹但真实的程序员编程语录
  8. 10/9 看的何向南老师团队关于bias和debias最新综述;还可以吧
  9. 2020年年终总结_By 吾方羡
  10. Let's go home 【2-sat 经典作图】+【scc判定有无解】