初步认识STM32的GPIO
STM32作为现在主流的单片机,在很多场所都能见到它的身影(这里我就不细说了,别搞得好像我是个推销员似的~~)。M3中绝大部分的引脚都是GPIO引脚(除了电源、晶振、boot、下载、复位外)。所以GPIO还是需要熟悉下,毕竟也是最基础的东西啦。
GPIO是通用输入输出端口的简称,简单来说就是M3可以控制这个引脚为输入或者是输出。M3的GPIO引脚与外部设备连接起来,可以实现与外部设备通讯、控制以及采集数据等功能。
上图是M3中的GPIO引脚原理图,最右边的IO就是芯片引出来的引脚,咱们可以使用。左边虚线框内的是在芯片内部现实的。右侧保护二级管的主要功能是防止由于外部输入的电压过高或过低进入芯片内,导致芯片烧了。从图中可以看出GPIO可以分为输入和输出:
- 输入功能
- 模拟输入(输入的是模拟信号,供ADC使用),这个输入必须在施密特开关之前使用。经过施密特触发器之后就变成了数字信号。
- 上下拉输入,上下拉输入主要作用是确定引脚的默认电平。使用上拉输入时,默认是高电平;下拉输入时默认的是低电平。上拉输入在IIC总线中会使用到
- 悬空输入,悬空输入的时候引脚的状态完全有外部决定。用于按键之类的场所。
- 复用输入,复用输入功能主要是把这个IO管脚用于别的地方,如USART。这时数据就不会存放在输入数据寄存器中。
- 输出功能
- 推挽输出,推挽输出是两个MOS管都会被使用上,N-MOS管使用的时候是拉电流、而P-MOS使用的时候是灌电流。所以称为退往输出。大多数情况下都是使用推完输出的。
- 开漏输出,开漏输出是只用N-MOS管使用,P-MOS管不工作。所以要么输出低电平要么输出高阻态。为了正常使用基本上会接个上拉电路,输出为高阻态时由上拉电路决定输出,使用场所主要在IIC、SMBUS通讯等需要“线与”功能的总线电路中,或者是需要用在电压不匹配的场所中(如需要输出5V的高电平,就可以在上拉电阻上接一个5V电源,把IO设置为开漏输出,在输出为高阻态的时候,引脚的电压有上拉电源控制)
- 复用输出,复用输出是此IO引脚用于别的功能,数据不从输出数据寄存器中获取。如用于USART中,数据由串口的发送寄存器控制。
推挽输出/开漏输出,中数据都是从输出数据寄存器中获取,我们可以直接操作输出数据寄存器,也可以通过操作位设置/清除寄存器来修改输出数据寄存器中的值从而达到控制输出的状态
在输出模式中,输出控制器件来控制使用复用输出还是正常的输出功能。即数据源从从输出数据寄存器中拿还是从别的地方获取
在配置GPIO引脚模式时,需要注意没4个bit决定一个引脚的模式。在配置时发现上下拉使用的相同的数据(图中的10),那么如何区分是使用上拉还是下拉呢?这里使用了输出数据寄存器来区分,这点可以在库函数中发现