STM32 | GPIO口的普通与复用如何配置与用法,本文降从最底层教你如何查看手册运用寄存器来实现GPIO口的配置

简介: STM32 | GPIO口的普通与复用如何配置与用法,本文降从最底层教你如何查看手册运用寄存器来实现GPIO口的配置

目录


GPIO

查看原理图

芯片电路原理图

芯片数据手册

找到引脚定义,理解引脚功能

找到功能对应的Port

微控制器参考手册

总结


正文


GPIO


GPIO(英语:General-purpose input/output),通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。


既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。


本次举例的芯片为STM32G4系列,其他芯片配置原理类似,相信你看完这篇文章后会有更深入的理解。


查看原理图


要从底层理解GPIO口配置的原理,必然就少不了看原理图,大家稍安勿躁,一定要克服,现在就由我来带大家认清GPIO的真面目吧,简单易懂,放心食用。


芯片电路原理图


我们只来看芯片区域的原理图,其他外设暂时不看,可观们请看下图:

00000000000000000000000000000000000000000000.png

STM32芯片和51类似,GPIO引脚也是分为了几组,有PA0~PA15,PB0~PB15等,其中有一些引脚是我们无法配置的,如序号15,31,47,63的VSS等,具体看下图(非灰色的引脚就是无法改变的),然后对照上图就能看出来,这些引脚都是接地或者高电平之类的固定值。

0000000000000000000000000000000000000000000000000000.png

好的,现在我们进入正题,假如我们想使用PA4引脚的“SPI3_NSS/ I2S3_WS”功能,我们是不是要先知道PA4引脚普通模式是什么功能,复用模式又是什么功能呢,然后再去理解,普通模式与复用模式如何配置。那我们接着往下看。


芯片数据手册


在芯片书手册中,我们主要查询的是各个GPIO口的功能,包括普通模式与复用模式下的各种功能,然后去对照微控制器操作手册来配置GPIO口,话不多说,接下来看图(我们依旧以配置PA4口的“SPI3_NSS/ I2S3_WS”功能举例):


找到引脚定义,理解引脚功能


第一步,找到手册中引脚及引脚描述(Pinouts and pin description)这一章(不同手册名称可能不同,但意思大抵是相同的),然后再向下找到“Pin definition”:

00000000000000000000000000000000000000.png

然后再这一章节中找到介绍PA4的地方,如下,我们就可以知道PA4引脚的普通模式与复用模式的功能分别是什么了,也能找到我们的目标PA4引脚的“SPI3_NSS/ I2S3_WS”功能。

0000000000000000000000000000000000.png

在这之中,我们发现PA4引脚的普通功能是TT_a,而复用功能有TIM3_CH2, SPI1_NSS, SPI3_NSS/ I2S3_WS, USART2_CK, SAI1_FS_B, EVENTOUT,这么多,我们要找的“SPI3_NSS/ I2S3_WS”就在复用功能中,但是又这么多复用功能,我们要这么去配置来分辨他们呢?我们接着向下走。


找到功能对应的Port


第二步,找到手册中引脚及引脚描述(Pinouts and pin description)这一章(不同手册名称可能不同,但意思大抵是相同的),然后再向下找到“Alternate functions”:

00000000000000000000000000000.png

点击即可看到如下,再找到PA4,后面就是PA4 引脚的复用功能,再这张图中PA4后面找到“SPI3_NSS/ I2S3_WS”功能对应的列头(Port),可以看到是“AF6”:

000000000000000000000000.png

接下来我们拿着这个Port“AF6”往下走


微控制器参考手册


我们现在这个手册中找到“General-purpose I/Os (GPIO)”中的“GPIO registers”,在这下面找到寄存器(GPIOx_AFRL),我这里是“GPIO alternatefunction low register(GPIOx_AFRL) (x = A to G)”:

000000000000000000000.png

这里可以看到有两个(GPIO_AFRH),对应的是low reguster低寄存器(低八位)与high reguster高寄存器(高八位),我们需要找的是PA4口,也就是低八位了,所以我们来看9.4.9low register:

0000000000000000.png

因为我们找的是PA4口。对应的是AFSEL4,下面有四个数据为,现在是定义到了PA4口,那么接下来就要实现“SPI3_NSS/ I2S3_WS”,这个功能对应是port是”AF6“,我们往下翻 可以看到如下,“AF6”对应的数据是“ 0110”。

0000000000000.png

现在一切都浮出水面啦,最后的配置就是将“GPIOX_AFRH”寄存器赋值,因为找的是PA4口,所以是GPIOA_AFRH,然后也因为是PA4,所以我们选择到AFSEL4[3:0],而我们选择的功能对应的Port是“AF6”,而“AF6”对应的是数据是“0110”,所以我们赋值是数据为“0110”,到此,我们就完成了PA4口复用功能“GPIOA_AFRH”的选择了。


总结


首先在硬件手册中了解 GPIO端口的名称;然后再到数据手册中找到需要使用的GPIO的普通模式还是复用模式,如果是复用模式,在找到该复用模式对应的port是多少;然后再到微控制器手册中找到对应的寄存器赋值,以及port对应的数值,再赋值给寄存器就可以啦。

相关文章
|
12天前
|
C语言 芯片 内存技术
STM32F103标准外设库——寄存器 (二)
STM32F103标准外设库——寄存器 (二)
87 1
STM32F103标准外设库——寄存器 (二)
|
12天前
|
存储
STM32F103标准外设库——GPIO 输入、输出 (五)
STM32F103标准外设库——GPIO 输入、输出 (五)
90 0
STM32F103标准外设库——GPIO 输入、输出 (五)
|
12天前
|
中间件 编译器 调度
STM32cubemx对FreeRTOS的适配(工程模板配置)
STM32cubemx对FreeRTOS的适配(工程模板配置)
106 0
|
7月前
|
芯片
STM32速成笔记(二)—GPIO
本文介绍了STM32的GPIO的配置和使用方法,并且给出了应用实例。此外,针对使用时可能遇到的一些问题给出了解决办法。
242 0
STM32速成笔记(二)—GPIO
|
12天前
|
芯片
STM32 GPIO工作原理详解
STM32 GPIO工作原理详解
|
12天前
|
存储 芯片
STM32 cubemx配置USART DMA传输
STM32 cubemx配置USART DMA传输
71 0
|
7月前
|
传感器 智能硬件
STM32cubemx配置驱动DHT11模块
STM32cubemx配置驱动DHT11模块
84 0
|
8月前
|
芯片
STM32F0单片机快速入门五 GPIO中断
STM32F0单片机快速入门五 GPIO中断
|
12天前
|
传感器
|
9天前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)