Skip to main content

36.GPIO寄存器详解

Hello,小伙伴们,大家好,这里是左左右。前面视频我们讲过 GPIO相关寄存器ODR和BSRR,今天我们将把剩余的GPIO核心寄存器全部讲完。首先来看端口配置低寄存器G P I O x C R L,它是一个32位寄存器,被划分为8组,每组4位,分别对应聘 0到聘7,也就是端口的低8位,这也是它名称中带“低”字的原因,每一组又分为两部分,M O D E位和C N F位,各占2比特,它们组合起来,共同决定一个引脚的工作模式与特性,其中M O D E位是0 0时表示的I O端口为输入模式,0 1表示输出模式,最大速度10兆赫兹,一零表示输出模式,最大速度2兆赫兹,1 1表示输出模式,最大速度50兆赫兹,C N F位含义取决于M O D E位设置,当M O D E位设置为输入模式时,0 0表示模拟输入模式,0 1表示浮空输入模式,1 0表示上拉或下拉输入模式,1 1位为保留位,没有实际作用,当M O D E位设置位输出模式时,0 0表示通用推挽输出模式,0 1表示通用开漏输出模式,1 0表示复用推挽输出模式,1 1表示复用开漏输出模式,接下来是端口配置高寄存器G P I O x C R H,位含义和G P IO x C R L是一模一样的,只不过分别对应聘8到聘15高8位引脚,然后是端口输入数据寄存器G P I O x I D R,它的低16位分别对应聘0到聘15的输入电平状态,高16位为保留位,由于此时的引脚是用来读取s t m 三 二 芯片外部输入的高低电平信号的,所以它是只读的,接着是端口位清除寄存器G P I O x B R R,这里的低16位是用来给聘0到聘15置零的,它与我们前面讲过的G P I O x B S R R中的高16位的作用是一样的,这里就不赘述了,最后是端口配置锁定寄存器G P I O x L C K R,它的位0到位15 分别对应聘0到聘15。将某一位或多位设置为1,即表示选中该引脚,准备对其进行配置锁定。它的位16,L C K K,是锁定键。当它被成功置1后,之前被选中的引脚,即LCK中为1的位的配置才会被真正锁定,无法再被软件修改。而且位16锁定操作有一个严格的写入序列,需要先写1,再写0,最后再写1,最后一步就是读1,也就是读取位16有没有被置1,如果读取结果为1,就说明位16被成功锁定了,这个寄存器的作用是防止一些已配置好的关键引脚(如复位引脚、晶振引脚等)在程序后续运行中被意外修改,提高了系统的稳定性和安全性,到这里G P I O相关寄存器就全部讲完了,我在这里总结了一个表格给大家,接着我来出两道小的题目来考考大家对知识点的掌握情况,第一题如何通过配置寄存器,将P A 15引脚配置为上拉输入模式?首先定义指针,这里设置为1 0为上拉或下拉输入模式,他也没说上拉怎么设置,我们打开手册108页可以看到当设置为输入模式时,这里是断开的,此时s t m 3 2 赋予O D R寄存器另外一个功能,当设置输出数据数据寄存器对应为1,就是上拉输入,反之设置为0为下拉输入,接着来配置O D R寄存器,好的,这样就设置完成了,第二题将P B 3引脚配置为通用推挽输入模式,最大速度50兆赫兹,并锁定该引脚相关配置 我们一起来写一下,其实Hell库已经为我们写好了端口配置的函数了,我们打开s t m 3 2 cube I D E读一下它的源码,把找到线索汇总一下,这样看来当我们有了一定的知识储备,Hell源码读起来也并不是那么困难了,而是变成水到渠成的一件事了,好的,今天的视频就到这里,如果觉得有收获,一定要关注、点赞、收藏,评论,你的支持是我这样的小博主持续更新下去的最大动力,期待下期视频再见!