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


    🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏

    🪔本系列专栏 -  蓝桥杯嵌入式_勾栏听曲_0的博客

    🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️

    📌个人主页 - 勾栏听曲_0的博客📝

    🔑希望本文能对你有所帮助,如有不足请指正,共同进步吧🏆

    🎇安能以身之察察,受物之汶汶者乎?安能以皓皓之白,而蒙世俗之尘埃乎?📈


    GPIO

    查看原理图

    芯片电路原理图

    芯片数据手册

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

    找到功能对应的Port

    微控制器参考手册

     总结


    GPIO

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

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

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


    查看原理图

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

    芯片电路原理

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

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

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


    芯片数据手册

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

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

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

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

     在这之中,我们发现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”:

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

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


    微控制器参考手册

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

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

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

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


     总结

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


    如果有帮助的话,欢迎点赞收藏哦~🤩,有不同见解或更好的观点也可以在评论区留言,也可以笔者点点关注,互通有无,互相进步。

  • 相关阅读:
    Web安全之PHP的伪协议漏洞利用,以及伪协议漏洞防护方法
    开源任务调度框架
    基于yolov5的草莓成熟度检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】
    模拟卷Leetcode【普通】081. 搜索旋转排序数组 II
    单臂路由的配置
    使用VsCode调试UE5的PuerTs(实践测试来啦)
    【Axure高保真原型】知识图谱原型模板
    字符设备和杂项设备总结
    疟原虫蛋白复合物疫苗科研
    Alexon:在云原生环境中快速部署应用服务
  • 原文地址:https://blog.csdn.net/weixin_53050357/article/details/127720546