一、GPIO简介

GPIO(英语:General-purpose input/output),通用型之输入输出的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚,所有的GPIO引脚都有基本的输入输出功能。

    最基本的输出功能是由STM32控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。

    最基本的输入功能是检测外部电平,如把GPIO引脚连接到按键,通过电平高低区分按键是否被按下。

二、GPIO的工作模式

  1. 4种输入模式
  • GPIO_Mode_IN_FLOATING 浮空输入
  • GPIO_Mode_IPU 上拉输入
  • GPIO_Mode_IPD 下拉输入
  • GPIO_Mode_AIN 模拟输入
  1. 4种输出模式
  • GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
  • GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
  • GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
  • GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
  1. 3种最大输出速度
  • 2MHZ
  • 10MHZ
  • 50MHZ

三、GPIO框图剖析



我们所用到的每一个GPIO其内部结构都是这样,分别对应着GPIO的八种模式 这里我们简单的介绍下:

  • 保护二极管: IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入,当引脚电压高于VDD_FT时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁
  • 上拉、下拉电阻(输入驱动器中):控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平
  • TTL施密特触发器(输入驱动器中):基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,模拟信号转化为0和1的数字信号 也就是高低电平 并且是TTL电平协议 这也是为什么STM32是TTL电平协议的原因
  • P-MOS管和N-MOS管(输出寄存器中):信号由P-MOS管和N-MOS管,依据两个MOS管的工作方式,使得GPIO具有“推挽输出”和“开漏输出”的模式 P-MOS管高电平导通,低电平关闭,下方的N-MOS低电平导通,高电平关闭

    注意: VDD_FT 代表IO口,兼容3.3V和5V,如果没有标注“FT”,就代表着只支持3.3V 。在芯片手册中可以查看支持5V的引脚:

  1. 浮空输入模式



    注意:浮空输入模式下,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的

  2. 上拉输入模式



    注意:上拉输入模式下,IO口默认为高电平

  3. 下拉输入模式



    注意:下拉输入模式下,IO口默认为低电平

  4. 模拟输入模式



    注意:模拟输入模式下,信号不经过施密特触发器,直接直接进入ADC模块,所以CPU不能读取输入寄存器上的引脚状态。除了ADC和DAC要将 IO 配置为模拟通道之外其他外设功能一律 要配置为用功能模式。

  5. 开漏输出模式



    注意:在开漏输出模式时,只有N-MOS管工作,如果我们控制输出为0,则P-MOS管关闭,N-MOS管导通,使输出低电平,若控制输出为1时,则P-MOS管和N-MOS管都关闭,输出指令就不会起到作用而是由

    I/O端口外部的上拉或者下拉决定,如果没有上拉或者下拉 IO口就处于悬空状态。

  6. 推挽输出模式(带上拉)



    注意:在推挽输出模式时,N-MOS管和P-MOS管都工作,如果控制输出为0,则P-MOS管关闭,N-MOS管导通,若控制输出为1,则P-MOS管导通N-MOS管关闭。

  7. 复用开漏输出



    注意:复用开漏输出下,GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效; 输出的高低电平的来源于其它外设,

  8. 复用推挽输出(带上拉)



    注意:复用推挽输出下,GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效; 输出的高低电平的来源于其它外设,

    输出模式下施密特触发器是打开的,所以mcu是可以读取到I/O口的实际状态。

  • 开漏输出和推挽输出的区别:

    推挽输出:可以输出强高低电平,连接数字器件,推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。

    开漏输出:可以输出强低电平,高电平得靠外部电阻拉高,才能实现输出高电平,适合用做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。

  • F4系列与F1系列区别:

    本质上的区别是F4系列采用了Cortex-M4内核 而F1系列采用Cortex-M3内核

    F1系列(M3)IO口基本结构:



    F4系列(M4)IO口基本结构:

四、 寄存器介绍

STM32 的每个 IO 端口都有 7 个寄存器来控制,他们分别是:配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH;2 个 32 位的数据寄存器 IDR 和 ODR;1 个 32 位的置位/复位寄存器BSRR;一个 16 位的复位寄存器 BRR;1 个 32 位的锁存寄存器 LCKR;这里我们仅介绍常用的几个寄存器,我们常用的 IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR。

  1. 配置模式CRL和CRH寄存器



    从图中可以看出配置GPIO的模式需要4位进行配置,分辨是两位CNFy和两位MODEy进行配置,因为每组GPIO都有16个引脚,而STM32是32位的,所以一个寄存器无法完成一组GPIO的配置,其中CRL配置 0 ~ 7 引脚,CRH配置 8 ~ 15 引脚。
  • 比如我们要设置 PORTB 的 12 位为推挽输出 ,5 位为上拉输入。
//配置PB5为上拉输入
GPIOB->CRH &= 0XFF0FFFFF; //清掉这5引脚位原来的设置,同时也不影响其他位的设置
GPIOB->CRH |= 0X00800000; // 配置PB5上拉输入
GPIOB->ODR= 1<<5; //PB5 上拉 //配置PB12为推挽输出
GPIOB->CRH &= 0XFFF0FFFF; //清掉这12引脚位原来的设置,同时也不影响其他位的设置
GPIOB->CRH |= 0X00030000; // 配置PB12推挽输出
  1. 端口输入数据寄存器IDR

  2. 端口输出数据寄存器ODR

  3. 端口位设置/清除寄存器BSRR

  4. 端口位清除寄存器BRR

  5. 端口配置锁定寄存器LCKR

五、编写程序

上面介绍了GPIO的8中工作模式以及GPIO的寄存器使用,那么在控制GPIO之前需要配置GPIO的工作模式,这是STM32和51单片存在区别的地方。51单片的引脚功能是确定的,而STM32的引脚都是可以复用的,程序配置GPIO的方式有两种,一种是通过库文件的方法进行配置,另一种是通过寄存器进行配置,由于库文件的配置方式比较简单,网上也有很多文章讲解,这里我以寄存器为例进行学习。

注意:STM32的所用引脚都可以用于中断

程序是基于之前创建的项目模板(寄存器版)中进行更改即可,没创建过STM32项目的小伙伴浏览之前的STM32新建模板之库文件STM32新建模板之库文件

  • 更改main.c文件为一下内容即可
#include "stm32f10x.h"
#include "sys.h" /*------------------------------------------------------------
主函数
------------------------------------------------------------*/
int main()
{ RCC->APB2ENR|=0X0000001c;//先使能外设IO PORTa,b,c时钟 RCC->APB2ENR |= 1 << 12; GPIOB->CRH=0X00030000; //设置GPIOB的12引脚为推挽输出 while (1)
{
delay_ms(100);
GPIOB->ODR = ~(1 << 12); //设置12引脚输出0 delay_ms(100);
GPIOB->ODR |= 1 << 12; //设置12引脚输出1 }
}
  • 这是一个led闪烁的程序,编译下载运行即可。

参考文献

STM32F4 GPIO八种模式及工作原理详解:https://blog.csdn.net/as480133937/article/details/98063549

STM32-GPIO详解:https://blog.csdn.net/dnfestivi/article/details/104984813

《STM32中文参考手册》

STM32F3 GPIO的八种模式及工作原理的更多相关文章

  1. stm32 IO口八种模式区别

    初学STM32,遇到I/O口八种模式的介绍,网上查了一下资料,下面简明写出这几种模式的区别,有不对的地方请大家多多指正! 上拉输入模式:区别在于没有输入信号的时候默认输入高电平(因为有弱上拉).下拉输 ...

  2. Android系统Recovery模式的工作原理【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7464987  在使用update.zip包升级时怎样从主系统(main system)重启进 ...

  3. 7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

    作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年, ...

  4. kube-proxy IPVS 模式的工作原理

    原文链接:https://fuckcloudnative.io/posts/ipvs-how-kubernetes-services-direct-traffic-to-pods/ Kubernete ...

  5. vmware三种网络模式的工作原理及配置详解

    vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开vmware虚拟机,我们可以在选项栏的“编辑”下的 ...

  6. GPIO的8种模式详解

    和stm32的GPIO相关的寄存器有 (1)两个32位的配置寄存器(GPIOX_CRL,GPIOX_CRH) 每一个IO占用4位,16个IO占用64位就是两个32为寄存器. 其中CNF[1:0]是用来 ...

  7. ST MCU_GPIO的八种工作模式详解。

    补充: N.P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS) GPIO的八种工作模式详解 浮空输入_IN_FLOATING带上拉输入_IPU带下拉输入_IPD模拟输入_AIN ...

  8. 应用负载均衡之LVS(一):基本概念和三种模式

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  9. LVS(一):基本概念和三种模式

    网站架构中,负载均衡技术是实现网站架构伸缩性的主要手段之一.所谓"伸缩性",是指可以不断向集群中添加新的服务器来提升性能.缓解不断增加的并发用户访问压力. 负载均衡有好几种方式:h ...

随机推荐

  1. alert之后才执行

    如果在正常情况下,代码要在alert之后才执行,解决办法:将要执行的代码用setTimeout延迟执行即可(原因:页面未加载完毕)

  2. 使用jquery刷新页面以及javascript的一些基本函数

    如何使用jquery刷新当前页面 下面介绍全页面刷新方法:有时候可能会用到 1.window.location.reload()刷新当前页面. 2.parent.location.reload()刷新 ...

  3. 多媒体音视频处理及FFmpeg使用技巧总结

    截图 ffmpeg -ss 00:02:06 -i input.mp4 -f image2 -y poster.jpg 连续截图 ffmpeg -y -i input.mp4 -vf "fp ...

  4. 智龙开发板搭建llsp环境

    智龙开发板搭建llsp(linux+lighttpd+sqlite3+php)环境 1. 准备 1. 智龙开发板V3 2. 软件编译环境:VirtualBox6+CentOS6.10-i386.min ...

  5. 过滤敏感词工具类SensitiveFilter

    网上过滤敏感词工具类有的存在挺多bug,这是我自己改用的过滤敏感词工具类,目前来说没啥bug,如果有bug欢迎在评论指出 使用前缀树 Trie 实现的过滤敏感词,树节点用静态内部类表示了,都写在一个 ...

  6. ZooKeeper 06 - ZooKeeper 的常用命令

    目录 1 - 服务端常用命令 2 - 客户端常用命令 3 - 常用四字命令 4 - ZooKeeper 日志的可视化 版权声明 若要部署 ZooKeeper 单机环境,请查看此篇:https://ww ...

  7. 编译工具ant部署

    目录 一.环境准备 二.安装 三.使用验证 一.环境准备 当前环境:centos7.3一台 软件版本:ant-1.9 部署目录:/usr/local/ant yum依赖 yum -y java-1.8 ...

  8. Excel字符串函数公式大全

    一.Excel字符串的操作  1.1.Excel根据字节截取对应字符串(注:一个中文汉字对应两个字节) =LEFTB(A3,7) 从左边开始截取7个字节 =RIGHTB(A10,10) 从右边开始截取 ...

  9. 项目管理的基本概念(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 关于项目管理的基本概念,我看了好久,也迷糊了好久--原谅我实在不是个善于理解概念的妖,最终我决定,就记些简单的东东吧,具体 ...

  10. Java编程思想—读书笔记(更新中)

    第1章 对象导论 1.4 被隐藏的具体实现 访问控制的原因: 让客户端程序员无法触及他们不应该触及的部分(不是用户解决特定问题所需的接口的一部分) 允许库设计者可以改变类内容的工作方式而不用担心会影响 ...