今天,有网友私信问我为什么没有更新文章。 我有点不好意思没能马上更新文章。 因为没有太多时间准备,所以更新有点慢,但我决定每天分享一点知识。 我之前说过STM32的表。 钟表结束后,开始谈论外围设备。 我们从基本的GPIO开始。 打开STM32的手册。 让我们来看看第9章:通用辅助终端功能I/OS (GPiosandafios )。 ) STM32的手册网上有很多,可以自己找,不在的朋友也可以私信。 这主要是关于STM32的通用IO和多路IO的知识,我们无论看到哪个芯片,都必须能够看透官方给出的参考手册,从而理解芯片。 首先,让我们来看看IO端口的模型及其模型的相关知识。
输入:浮动输入-上拉输入-下拉输入-模拟输入
输出)开路漏极输出(推挽输出)开路漏极多路输出)开路漏极多路输出
让我们逐一分析这些问题:
首先是浮动输入。 什么是浮动输入? 也就是说,IO的电平状态是不确定的,完全由外部输入决定。 如果此针脚悬空,则无法确定是否要读取该端口的标高,并且此输入通常用作密钥检测。
上拉输入显然是在部件的内部加上了上拉电阻,由于内部有上拉电阻,可以起到电流限制的作用,在我们的使用中也是常见的情况。
下拉输入-在零件内部,通过电阻将此端子链接到GND上,默认情况下将此端子的级别设置为低电平,起到与上拉有点类似的作用。
模拟输入-此输入端口主要用于检测从IO端口输入的电平的电压。 其实,关于输出已经很清楚了。 正如文字所示,在使用中,我们也可以根据实际情况进行设定。 例如,有IO端口,但有外部忘记连接或电阻,没有外部输入时,希望默认为高电平时,可以设定为上拉输入。 先看看输入,再看看输出。 对输出有点讲究。
开放泄漏输出:
从图中可以看出,当我们的外部IO端口没有电压时,其实这个功能是无效的,完全没有用,所以我们在设置泄漏时,一定要在外部连接上拉电阻,通过控制CTRL侧来控制外部输入
推挽输出:
上图为推挽输出,我们的CTRL信号为高电平时,Q1导通,Q3截止,IO端口输出高电平,CTRL信号为低电平时,Q1导通,IO端口输出低电平。
推挽输出的复用和泄漏的复用实际上是作为第二功能的配置说明,使用方法与该方法一致。
说明IO端口的模式后,对与STM32IO端口相关的寄存器进行说明。 从下图的文档中:
各通用IO端口上有时有2个32位配置寄存器、2个32位数据寄存器、1个32位置/复位寄存器、1个16位位置复位寄存器、1个32位位置寄存器首先,让我们来看看通用IO端口。 通用IO端口复位中及复位后不久,复用功能未开启。 IO端口被设定为浮动输入。 因此,必须设计成在接通电源时这些IO的状态不会影响设计。 我以前在设计的时候遇到过这种情况。 手册中有几本特定的总线手册介绍了GPIO的模式构成。 这些构成见第九章的9.1.11节。 今后进行配置时,请务必确认是否按照这些配置进行了配置。 请千万不要弄错。
正式进入GPIO寄存器的相关知识。 首先,让我们来看两个寄存器: GPIOx_CRL和GPIOx_CRH。 这两个寄存器是IO端口配置寄存器,主要由IO输入或输出,以及IO端口的速度构成。
我们先来看看重置的值。 将0x4444 4444分解为二进制数。 他的值是0100010001000100010001000100。 将这些数字一一对应地带入该寄存器的对应位。 如果以MODE0和CNF0为对象,则可以看到CNF0[ 133600 ]=01,01,
ODE0[1:0] = 00,通过这两个数值然后根据下面的图示查询可以得出,默认的状态是InputMode,01:Floating Input状态,与我们之前手册上的一致,这就是我们分析GPIOx_CRL与GPIOx_CRH寄存器的方法。由于我们的引脚有16个引脚,而每个寄存器只能配置8个引脚,所以我们需要两个寄存器来配置这些引脚。GPIOx_CRL配置的低8个引脚,而GPIOx_CRH配置的高8个的引脚。
分析完模式,我们再来分析端口输入寄存器GPIOx_IDR。
我们从图中可以看出,该寄存器的高16位作为预留位置未使用,而使用了低16位。该寄存器的IDR0~IDR15对应的就是引脚0~15的输入值,而高16位都是0,这些位只能是只读的模式并且只能以字的形式读出。
看完端口输入寄存器我们再来看看端口输出寄存器GPIO_ODR:
与GPIO_IDR相识,端口输出寄存器的高16位也是保留的,而只用了低16位,每一位都可以读也可以写。ODR0控制这GPIOx_Pin0,ODR15控制这GPIOx_Pin15,这些位也只能以字(16位)的形式进行操作。今天有点晚了,该休息了,明天接着写,谢谢大家,大家晚安!!!!!