你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32入门-GPIO端口的八种工作模式

[复制链接]
攻城狮Melo 发布时间:2022-11-7 23:17
一.GPIO的简介
GPIO (general purpose input output)是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

1.引脚全是GPIO嘛?
答案是否定的,不是所有引脚都是GPIO

STM32F103VET6引脚图

d81b7e8215264ed3aee631f675411e4b.png
STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F103VET6 型号的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOE 共 5 组 GPIO,例如GPIOA(PA0~PA15 16个引脚)芯片一共 100 个引脚,其中GPIO 就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能

这100个引脚中除了GPIO还有特殊功能的引脚,例如复位引脚,电源引脚…

eff2ab6335984471984045e5e6f3277f.png

2.GPIO的输入输出模式
GPIO可配置8种模式
输出模式下可控制端口的输出高低电平,可用于驱动LED、控制蜂鸣器、模拟通信协议输出时序(SPI I2C 等)等
输入模式下可读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC电压采集、模拟通信协议接收数据(SPI I2C 等)等

3.GPIO基本结构

748064534aea438d9847685c3dc87b36.png

每个GPIO端口对应16个引脚,例GPIOA(PA0~PA15)
内核cpu就可以通过APB2总线对寄存器读写,完成输出电平和读取电平的功能

二.GPIO功能框图

753c81fedfd144dbba8026ae29c0552d.png

保护二极管
芯片的引脚电平0~3.3V,部分引脚可以5V,引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入
1.当引脚电压高于VDD 时,上方的二极管导通

6e3a132df2e147e0b220b082984d182a.png

防止过高电压进入芯片内部烧坏芯片

2.当引脚电压低于 VSS 时,下方的二极管导通

f54f0b4267aa4c3480032e818715738d.png

防止电压过低,从芯片内部汲取电流

施密特触发器

6fee4aab6f0a41f8b9455fe376b226d3.png

具有滤波的作用,就是让通过的电平输出稳定的高低电平

5ac6b76e5d1b4e1e8ad9c0cb14401587.png

三.GPIO的8种工作模式

c7402b3435ef48349f3eac9a3def27a4.png

1.浮空,上拉,下拉输入

ae3b81234c404725a5b9d82beca89c42.png

在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器 GPIOx_IDR读取 I/O 状态。

由于电阻阻值很大这里的上拉下拉输入都是弱上拉 弱下拉,为了对外部输入产生很大的影响

上拉输入:给一个默认的高电平也就是说当没有外部输入时默认输入高电平

11dd61a83e574010b40fc0a2fc23af0b.png

下拉输入:给一个默认的低电平也就是说当没有外部输入时默认输入低电平

d9702a539b5647f7b7180c5391d41755.png

浮空输入:如果输入引脚啥都不接,此时输入电平极易受外界的干扰导致输入电平不确定,完全由外部的输入决定。

a5cf301814014bd0afe2b2e07b168455.png

2.模拟输入
这模式主要为片上外设ADC而配置,从外部读取模拟信号

模拟信号:测试信号未经过采样前,均是时间和幅值均是连续的信号称为模拟信号,例如连续变化的电压,电流,温度等等。

数字信号:模拟信号经等间隔“采样”及幅值量化以后,时间和幅值均是不连续的(离散)的信号,例如0 /1

146d2c0e1cb44df5baadd354f73e5c21.png

这里不需要经过施密特滤波,人家本来就要连续变化的模拟量

3.推挽和开漏输出
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值

除了模拟输入的这种模式会关闭数字输入功能其他七种模式,都可以通过输入寄存器读取I/O状态,例:在模拟I2C实验中把GPIO的工作模式配置为开漏输出时同时也可以读取引脚电平状态,现在不知道不要紧后面会详细讲解

在输出模式中,推挽模式时双 MOS 管以轮流方式工作,输出数据寄存器 GPIOx_ODR可控制 I/O 输出高低电平。开漏模式时,只有 N-MOS 管工作,输出数据寄存器可控制 I/O输出高阻态或低电平。

1.推挽输出

7281237deaf943fab229c027d1112033.png

当输出寄存器输出高电平,则引脚也输出高电平

c3cfc904953046d6a1cb9e40cc2cfcd9.png

当输出寄存器输出低电平,则引脚也输出低电平

cb457a5ef69b4bc29df367da3666c76c.png

2.开漏输出

当输出寄存器输出高电平,则引脚输出高阻态

dc28cac2268d4bd496b908b1eb8d214a.png

当输出寄存器输出低电平,则引脚输出低电平

dd53455c20f44edba6388a95ecd0698d.png

4.复用功能推挽开漏输出
复用功能模式中,输出使能,输出速度可配置,可工作在开漏及推挽模式, 但是输出信号源于其它外设
输出数据寄存器 GPIOx_ODR 无效;输入可用,通过输入数据寄存器可获取 I/O 实际状态,但一般直接用外设的寄存器来获取该数据信号

这里以串口的发送TX和接收RX引脚为例

串口的发送引脚TX

15b766b943df4f62b9ef589b847265cf.png

串口的接收引脚RX

ecb310f614294be99dd53dde3fb169ca.png

这里串口外设不知道是什么不要紧,以后会细讲只要指到复用功能的推挽与开漏输出与普通的推挽与开漏输出只是输出的寄存器换成外设的寄存器


四.GPIO的寄存器
通过对 GPIO 寄存器写入不同的参数,就可以改变 GPIO 的工作模式,要了解具体寄存器时一定要查阅《STM32F10X-中文参考手册》中对应外设的寄存器说明。

端口配置低寄存器

5bc445efc995450883c0c5738165051b.png

在 GPIO 外设中,控制端口高低控制寄存器 CRH 和 CRL 可以配置每个 GPIO 的工作模式和工作的速度,每 4 个位控制一个 IO,CRH 控制端口的高八位,CRL 控制端口的低 8 位,具体的看 CRH 和 CRL 的寄存器描述

端口配置低寄存器

ede203295ac14641bd92328b57e40e8f.png

端口输出寄存器

2d309f5e6fca486db8a503764b446158.png

端口位设置/清除寄存器

6df3cafae7d74d339121a2f00aa13d7a.png

端口位清除寄存器

ec428b66947140e3ac7a5e926cb98ab2.png

端口位清除寄存器

9608a99810f042fc93b5f2d3f99e7836.png
————————————————
版权声明:rivencode


收藏 评论0 发布时间:2022-11-7 23:17

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版