STM32入门-GPIO端口的八种工作模式
Posted rivencode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32入门-GPIO端口的八种工作模式相关的知识,希望对你有一定的参考价值。
✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
📃个人主页:@rivencode的个人主页
🔥系列专栏:玩转STM32
💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习
目录
一.GPIO的简介
GPIO (general purpose input output)是通用输入输出端口的简称,简单来说就是软件可控制的引脚
,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
1.引脚全是GPIO嘛?
答案是否定的,不是所有引脚都是GPIO
STM32F103VET6引脚图
STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F103VET6 型号的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOE 共 5 组 GPIO,例如GPIOA(PA0~PA15 16个引脚)芯片一共 100 个引脚,其中GPIO 就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能
这100个引脚中除了GPIO还有特殊功能的引脚,例如复位引脚,电源引脚…
2.GPIO的输入输出模式
GPIO可配置8种模式
- 输出模式下可控制端口的输出高低电平,可用于驱动LED、控制蜂鸣器、模拟通信协议输出时序(SPI I2C 等)等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC电压采集、模拟通信协议接收数据(SPI I2C 等)等
3.GPIO基本结构
每个GPIO端口对应16个引脚,例GPIOA(PA0~PA15)
内核cpu就可以通过APB2总线对寄存器读写,完成输出电平和读取电平的功能
二.GPIO功能框图
- 保护二极管
芯片的引脚电平0~3.3V,部分引脚可以5V,引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入
1.当引脚电压高于VDD 时,上方的二极管导通
防止过高电压进入芯片内部烧坏芯片
2.当引脚电压低于 VSS 时,下方的二极管导通
防止电压过低,从芯片内部汲取电流
- 施密特触发器
具有滤波的作用,就是让通过的电平输出稳定的高低电平
三.GPIO的8种工作模式
1.浮空,上拉,下拉输入
在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器 GPIOx_IDR读取 I/O 状态。
由于电阻阻值很大这里的上拉下拉输入都是弱上拉 弱下拉,为了对外部输入产生很大的影响
-
上拉输入:给一个默认的高电平也就是说当没有外部输入时默认输入高电平
-
下拉输入:给一个默认的低电平也就是说当没有外部输入时默认输入低电平
-
浮空输入:如果输入引脚啥都不接,此时输入电平极易受外界的干扰导致输入电平不确定,完全由外部的输入决定。
2.模拟输入
这模式主要为片上外设ADC而配置,从外部读取模拟信号
-
模拟信号:测试信号未经过采样前,均是时间和幅值均是连续的信号称为模拟信号,例如连续变化的电压,电流,温度等等。
-
数字信号:模拟信号经等间隔“采样”及幅值量化以后,时间和幅值均是不连续的(离散)的信号,例如0 /1
这里不需要经过施密特滤波,人家本来就要连续变化的模拟量
3.推挽和开漏输出
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值
除了模拟输入的这种模式会关闭数字输入功能其他七种模式,都可以通过输入寄存器读取I/O状态,例:在模拟I2C实验中把GPIO的工作模式配置为开漏输出时同时也可以读取引脚电平状态,现在不知道不要紧后面会详细讲解
在输出模式中,推挽模式时双 MOS 管以轮流方式工作,输出数据寄存器 GPIOx_ODR可控制 I/O 输出高低电平。开漏模式时,只有 N-MOS 管工作,输出数据寄存器可控制 I/O输出高阻态或低电平。
1.推挽输出
- 当输出寄存器输出高电平,则引脚也输出高电平
-
当输出寄存器输出低电平,则引脚也输出低电平
2.开漏输出 -
当输出寄存器输出高电平,则引脚输出高阻态
-
当输出寄存器输出低电平,则引脚输出低电平
4.复用功能推挽开漏输出
复用功能模式中,输出使能,输出速度可配置,可工作在开漏及推挽模式, 但是输出信号源于其它外设
输出数据寄存器 GPIOx_ODR 无效;输入可用,通过输入数据寄存器可获取 I/O 实际状态,但一般直接用外设的寄存器来获取该数据信号
这里以串口的发送TX和接收RX引脚为例
串口的发送引脚TX
串口的接收引脚RX
这里串口外设不知道是什么不要紧,以后会细讲只要指到复用功能的推挽与开漏输出与普通的推挽与开漏输出只是输出的寄存器换成外设的寄存器
四.GPIO的寄存器
通过对 GPIO 寄存器写入不同的参数,就可以改变 GPIO 的工作模式,要了解具体寄存器时一定要查阅《STM32F10X-中文参考手册》中对应外设的寄存器说明。
端口配置低寄存器
在 GPIO 外设中,控制端口高低控制寄存器 CRH 和 CRL 可以配置每个 GPIO 的工作模式和工作的速度,每 4 个位控制一个 IO,CRH 控制端口的高八位,CRL 控制端口的低 8 位,具体的看 CRH 和 CRL 的寄存器描述
端口配置低寄存器
端口输出寄存器
端口位设置/清除寄存器
端口位清除寄存器
端口位清除寄存器
总结
大家一定要把八种GPIO的模式都弄清楚原理,为后面学习打下坚实的基础,本文就到这里,如果还有朋友对寄存器不了解的请看
什么是寄存器觉的本文对你有帮助就快点赞收藏叭!!!
结束语:
最近发现一款刷题神器,如果大家想提升编程水平,玩转C语言指针,还有常见的数据结构(最重要的是链表和队列)后面嵌入式学习操作系统的时如freerots、RT-Thread等操作系统,链表与队列知识大量使用。
大家可以点击下面连接进入牛客网刷题
点击跳转进入网站(C语言方向)
点击跳转进入网站(数据结构算法方向)
以上是关于STM32入门-GPIO端口的八种工作模式的主要内容,如果未能解决你的问题,请参考以下文章