STM32F0——GPIO详解

一. GPIO (General Purpose I/O Port) 统称为通用输入/输出端口。

一个完整的GPIO组由16个引脚构成,每个GPIO引脚都可以通过软件配置为
输出 ,输入,复用的外设功能
并且所有的I/O都可以配置为外部中断的输入端。

GPIO——输出状态下,可以配置成带有上拉或下拉的推挽输出或开漏输出。
GPIO——输入状态下,可以配置成浮空,上拉,下拉,或模拟输入。

系统复位后所有的GPIO端口被配置成浮空输入模式,
特殊的是由于调试的
PA13 (SWDAT)引脚置于上拉模式。
PA14 (SWCLK)引脚置于下拉模式。

二. GPIO的基本结构

保护二极管,上下拉电阻
引脚的两个二极管可以防止引脚外部过高或过低的电压输入,
当引脚的电压输入高于VDD时,上方的二极管导通。
当引脚的电压输入低于VSS时,下方的二极管导通。
Alt

1. 输入配置

GPIO端口配置为输入模式时,端口的输出缓冲区禁止,输入端连接的TTL施密特触发器激活,GPIOx_PUPDR寄存器可以配置成上拉、下拉电阻。

TTL施密特触发器:
当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。
能将模拟信号波形整形为数字电路能够处理的方波波形。
在此处的作用就是将模拟信号转化为0,1的数字信号,然后储存在 输入数据寄存器中。

在每个AHB时钟周期,引脚上的数据都会被锁存至输入数据寄存器,CPU通过对输入数据寄存器的访问可以获取I/O口的实际状态。
Alt

2.输出配置

GPIO端口配置为输出模式时,输出缓冲器开启。

如果GPIO工作在开漏模式,
输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,
输出数据寄存器上的数字“1“则不会激活P-MOS,也就是N-MOS 和 P-MOS 都处于关闭状态,端口处于高阻状态。

如果GPIO工作在推挽模式,输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,输出数据寄存器上的数字“1“将激活P-MOS,端口处于高电平。
当引脚高低电平切换时,两个 MOS管轮流导通,P负责管电流,N负责拉电流,使其负载能力和开关速度比普通方式有了很大的提高。推挽输出的低电平为0v,高电平为3.3v。

同时,在GPIO配置为输出时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值。也就是此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。

Alt

3. 复用功能配置

绝大多数GPIO端口与外设输入输出共同使用引脚。
当端口被配置为复用功能时,来自外设的信号会驱动输出缓冲器,此时输出数据寄存器将无法驱动输出缓冲器,也就是说,端口的状态完全有外设信号来决定。
同时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值,此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。

Alt

4. 模拟配置

当端口被配置为模拟输入时,例如作为ADC模块的输入时,输出缓冲器关闭,施密特触发器关闭,上下拉电阻被禁止。此时输入的电流电压完全是外部的真实电流电压。
Alt

三. GPIO的特殊功能

GPIO除了可以配置输入,输出和复用功能外,还具有一些较为特殊的功能,比如可以单独对某一位进行置位/复位操作, 端口锁定操作,或将端口的复用功能重映射到其他引脚上等。

1. 位操作

GPIO端口通过置位/复位寄存器 GPIOx_BSRR,可以对端口输出数据寄存器的每个位进行置位和复位操作。
置位/复位寄存器 GPIOx_BSRR是一个32位寄存器,而端口输出数据寄存器GPIOx_ODR是16位的,相对于GPIOx_ODR寄存器中的每一位,GPIOx_BSRR寄存器中有两位与之对应,即 BSx和BRx。
对BSx位写1时会将相应的ODRx位置位,对BRx位写1时会将相应的ODRx位复位,
对GPIOx_BSRR的任意位写0时,都不影响GPIOx_ODR的值。
如果对GPIOx_BSRR寄存器的BSx和BRx同时写1,那么置位操作具有优先权。

2.端口锁定

端口配置锁定寄存器(GPIOx_LCKR)用于冻结端口的控制寄存器。
当一个特定的写/读序列作用于GPIOx_LCKR寄存器时,相应端口的控制寄存器将会冻结,直到复位才有效。

3. 端口复用功能映射。

STM32F系列微控制器的大部分GPIO端口会与多个外设共用,选择每个端口的有效复用功能可以通过GPIOx_AFR寄存器来实现。通过对GPIOx_AFR寄存器的AFRLx[3:0] 为赋值,可以选择该端口所连接的外设,也可以根据需要将某一外设复用功能映射到其他引脚。

四,GPIO寄存器分类。

1. I/O端口控制寄存器

每个GPIO端口都有4个32为控制寄存器,
GPIOx_MODER: 选择I/O模式,如输入,输出,复用或模拟等。
GPIOx_OTYPER: 选择输出类型,如推挽,开漏等。
GPIOx_OSPEEDR: 设定I/O口的速度。
GPIOx_PUPDR: 选择I/O口上拉,下拉方式。

2. I/O端口数据寄存器

每个GPIO口有2个16位数据寄存器和一个32位置位/复位寄存器
输入数据寄存器 GPIOx_IDR : 存放I/O口锁存的输入数据,只读寄存器。
输出数据寄存器 GPIOx_ODR: 存储输出数据,配置输出I/O, 可读可写。
置位/复位寄存器 GPIOx_BSRR: 用于对端口的某一位进行单独的操作。

3. I/O端口锁定及复用功能寄存器

32位端口配置锁存寄存器GPIOx_LCKR: 用于锁定I/O口配置,防止被微控制器在运行过程中更改。
2个32位复用功能寄存器GPIOx_AFRH, GPIOx_AFRL: 用于端口复用功能配置。

全部评论

相关推荐

2025-12-12 19:58
哔哩哔哩_产品运营
跟同事聊天时候,同事说“你刚来时候blabla”,突然意识到自己已经正式工作一年多了!就这么从脆皮内耗大学生逐渐磨练成厚血条(厚脸皮)工位主理人。秋招简历当然也是投了不少份,但总有一些机会要留给自己的白月光,比如阿B,说说我秋招选择阿B的理由吧:1. “为爱发电”:说来兴趣真的是初心,阿B在手机陪我看了那么多番剧vlog学习视频,当然想和它距离更近一些。来了之后发现,B站重要活动要专门走内宣是有原因的,身边的六级大佬绝对不在少数。2. 实习体验感拉满:嗯对其实等不到正式工作就先来实习体验了。实习期在一个非常好的组,大家都很年轻氛围超好,做事情讲背景、讲逻辑不会只丢脏活累活。平时聊得来,工作起来也能快速打配合,项目完成时候所有人都成就感满满。再说说来正式工作之后的体验感:1. 校招生mentor文化很需要:在阿B每个校招生入职都是会有一位mentor的,不会让大家有刚工作人生地不熟就孤苦一人挑大梁的感觉。很幸运我的mt人真的超好,耐心温柔业务能力又很强。常常在对需求听她帮我说话时看着她身上闪耀的光芒想要流泪。有mt的话landing期会顺畅很多。公司也会安排一些活动帮助mentor和mentee增进感情。2.小动物们和各类活动是回血剂:工作起来当然难免遇到一些磕磕磨磨,但是压力大时候转头看到想悄悄溜过的小猫摸上一把,真的会治愈不少。还有节假日的各种活动和扫楼活动,真的会给上班增加动力。最后上图!没有任何工作会让人一直开心吧,但阿B你在照顾员工心情这一块儿做得真的很不错。
哔哩哔哩公司福利 904人发布
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务