找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1642|回复: 0
收起左侧

(菜鸟笔记)STM32配置GPIO时对内部硬件的‘开与关’

[复制链接]
ID:104497 发表于 2021-2-7 11:02 | 显示全部楼层 |阅读模式
说心里话,STM32 GPIO的配置操作并不比51单片机复杂多少,但不同的应用场景可能会涉及到需要了解IO配置过程中更深入的细节,比方说内部施密特触发器的通断到底如何控制,复用信号又是如何送到IO口上的,等等。
这些操作在手册上都说到了,但个人觉得这些知识点比较分散,不利于初学者掌握其中的细微之处,所以我想把GPIO配置的控制逻辑梳理了一下,看看寄存器哪些位的哪些配置值都干了哪些事儿,‘接通’或‘断开’了内部的哪些硬件。
下图是GPIO基本结构图。
为清晰表达出内部构件被使能或禁能,我使用了‘开关’概念,当然,实际它们不会真的是一些硬件开关,而是为了表达逻辑1、0状态。
图7.jpg


1、通用输入模式配置(以PA3为例)
图8.jpg
将PA3配置成输入模式的前提是GPIOA_CRL的MODE3[1:0]=00。
如果想把它配置成模拟输入用于ADC,那就在GPIOA_CRL的CNF3[1:0]写入00。
因为STM32F没有复用输入模式,所以要想把它配置成复用输入USART2_RX,要么是让CNF3[1:0]=01使PA3成为浮空输入模式;要么是让CNF3[1:0]=10配置成内部弱上拉输入模式,但必须在此前加上一条对GPIOA_ODR的ODR3=1的操作。
这是一个很有趣也很费解的操作,既然是配置输入,怎么又跟输出寄存器扯上关系了呢?请看手册上的说明:
图9.jpg
既然配置成输入时输出缓冲器已经被关闭,那么ODR3的写1操作就一定不是指向末端的PMOS和NMOS管。肯定有一个内部逻辑,使ODR3关联到上拉及下拉电阻开关。至于这个逻辑到底是个啥样的硬件,官方没说,咱们也不好意细问。知道有这么回事儿,别在配置上下拉输入时出现错误就行了。
如果PA3配置成了复用输入USART2_RX,读GPIOA_IDR的IDR3是允许的,而且读回来的就是PA3当前的逻辑状态,因为APB2的时钟会采样PA3,除了送到USART2模块的RX以外,还锁存到GPIOA_IDR的IDR3上。此时要闲着没事儿非得读一下GPIOA_ODR的ODR3,操作上也是允许的,但似乎也没啥实际意义,因为读回去的位状态是之前对ODR3的最后一次写入值。
如果PA3配置成了模拟输入,施密特触发器就会被断开,读IDR3就不再是PA3的数据了。
2、通用输出模式配置(以PA2为例)
图10.jpg
将PA2配置成输出模式的前提是GPIOA_CRL的MODE2[1:0]=01、10或11。
由于在输出模式下施密特触发器一直是被打开的,每个APB2时钟也像输入模式一样把PA2锁存到GPIOA_IDR的IDR2,所以此时读GPIOA_IDR能够返回PA2当前的输出逻辑状态,但这可不是说此时PA2又可以当成输入口使用,尤其是处于推挽输出模式下,PA2外面的信号是进不来的。在开漏模式下,倒是可以把PA2当成输入,这一点在下面会有描述。
还有一点值得注意,如果想把PA2配置成USART2_TX,那就必须将它配置成复用推挽或复用开漏输出模式,千万不能让CNF2[1:0]=00(通用推挽)或01(通用开漏),否则USART2_TX送不到PA2上,因为这个时候‘复用/通用切换开关’是指向GPIOA_ODR的ODR2位而不是指向USART2_TX。
3、输入输出模式配置(以PB11为例)
有的时候需要将某个引脚当成IO口使用,比方说用PB11模拟I2C的SDA口线。
请注意,这里说的是‘模拟’SDA,而不是把PB11配置成复用的I2C2 SDA口。
咱们都知道,SDA线上必须外加上拉电阻,到底是为啥就不多说了。
作为模拟的SDA,有一繁一简两个方法:需要PB11送数就把它配置成通用输出模式,回头又需要它收数了再配置成输入模式,在理论上这种方式是可行的,但切来切去的也真够麻烦。
简单的方法就是把PB11配置成通用开漏输出模式,输出时自不必说,当输入时只要先在ODR11写个1就行了。
图11.jpg
此时PB11是通用开漏模式,输出端的PMOS被禁用,在ODR11上写1并不能打开这个MOS管,而NMOS的驱动逻辑是0,所以这个MOS管也会被断开。但由于此时施密特触发器是接通的,所以引脚上的信号会被APB2时钟采样和锁存,读取IDR11就可以获取PB11的输入数据。这种在端口锁存上写1变输入的方式与51单片机准输入IO口的操作是一样的。
上面说的是模拟I2C,如果是直接启用复用功能那就不用这么麻烦了,人家早就把相关的逻辑操作搞得妥妥的了。按照手册上的说明,只需将PB11配置成复用开漏就一切OK。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表