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对应的数值,再赋值给寄存器就可以啦。

相关文章
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
715 0
|
3月前
|
开发框架 C语言 开发者
STM32寄存器操作、模板构建
【8月更文挑战第23天】本文档介绍STM32中的寄存器操作方法与模板构建技巧。寄存器是STM32控制内外设的核心,通过直接读写特定内存地址来进行操作。以配置GPIO为例,需定位寄存器地址并写入适当值。文档还提供了一个基本的代码模板,包括包含头文件、时钟配置、外设初始化及主函数流程,帮助开发者快速搭建开发框架,并强调了参考手册的重要性以确保正确使用。
|
4月前
stm32f407探索者开发板(十四)——IO引脚复用和映射
stm32f407探索者开发板(十四)——IO引脚复用和映射
428 0
|
4月前
stm32f407探索者开发板(九)——寄存器地址名称映射
stm32f407探索者开发板(九)——寄存器地址名称映射
|
4月前
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
|
4月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
161 0
|
4月前
|
数据安全/隐私保护
STM32F103C8T6实现简易密码锁(CubeMax配置)(一),Oled显示。
项目功能:实现设置密码,登陆密码,后期还可以通过E2PROM实现掉电不丢失数据。通过Oled的显示去判断我们是否设置或者登陆成功。
|
5月前
|
移动开发
技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)
技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)
267 0
|
5月前
经验大分享:STM32F4寄存器初始化系列:GPIO
经验大分享:STM32F4寄存器初始化系列:GPIO
31 0
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
446 2