欢迎光临
我们一直在努力

stm32 GPOI(hal库)

下面我们来先学习如何实现用hal库配置一个引脚输出。 首先选择一个引脚,这里我们选择PA7,然后选择输出模式 在这里插入图片描述 接着到这个页面选择GPIO细化我们的配置: 在这里插入图片描述 在这里插入图片描述 随后弹出这个页面就可以选择我们想要的配置,这里将PA7配置为输出高电平,推挽输出,无上下拉,输出模式一般默认选择无上下拉,这样能实现输出电平由代码直接控制。

这样我们就配置好一个引脚,然后生成文件就可以了。

下面是控制引脚电平的代码:

/* GPIOx:要设置的GPIO的分组
* GPIO_Pin:要设置的GPIO的编号
* PinState:GPIO状态(GPIO_PIN_SET/GPIO_PIN_RESET)
*/

HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState);

GPIO(通用输出输入引脚): 它的作用就是在STM32的控制之下,读取外部电路的电压值,或者向外输出一定的电压值。 IO口有两种功能,复用和重映射 **复用:**就是同一个引脚具备有多种功能,例如:

在这里插入图片描述 PA9既能够用作定时器1通道2来使用,也能当作USART1的发送通道使用,下面图片就是将PA9当作发送通道使用

在这里插入图片描述 重映射:当两个外设引脚冲突时,就可以将其中一个外设的接到备用引脚上 在这里插入图片描述 GPIO有八种工作模式,先来简单介绍四种输入模式:上拉输入,下拉输入,浮空输入,模拟输入。 首先是浮空输入: 在这里插入图片描述 浮空输入模式下,要外接一个上拉电阻,因为GPIO口内部处于高阻态(相当于芯片内部有一个巨大的电阻),而高阻态意味着它分到的电压更多,所以10K电阻的压降几乎为0V,因此PB12处就几乎是3.3V,看图可知,当KEY1按下时,那么PB12就会从3.3v变成0v,这样我们就可以读取PB12这个引脚电平来判断按键是否按下了,下拉电路同理。

上图是靠外部上拉电阻实现的,我们也可以靠内部的上拉电阻实现,所以接下来介绍,上拉输入和下拉输入:

在这里插入图片描述 在上图可以看出,外部并没有接上拉电阻,也可以实现这样的操作,不过要注意的是配置就要选择上拉输入了,配置如下图。 在这里插入图片描述 下面是选择上拉输入的代码:

if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==GPIO_PIN_RESET)
{
//软件消抖
HAL_Delay(20);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==GPIO_PIN_RESET)
{
//翻转电平
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7);
}
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET);
}

接下来我们来介绍其它四种输出模式: 首先我们先通过这个图来理解这八种工作模式: 在这里插入图片描述 首先是推挽输出模式:

在推挽输出下:P-MOS管和N-MOS管协同作用,当N-MOS断开,P-MOS激活时,对外输出3.3v高电平,LED灯点亮,当P-MOS断开,N-MOS激活时,对外输出0v低电平,LED灯熄灭,这样就实现了对外输出高低电平。 在这里插入图片描述

但总有一些更高或者更低的电压驱动,而推挽输出最大只能输出3.3v高电平,如果遇到5v才能驱动的LED灯时,我们就可以使用开漏输出了,在开漏输出下,只有N-MOS工作,P-MOS一直处于断开,所以当N-MOS断开时,输出IO口就会处于高阻态,并不对外输出特定的电平信号,而当N-MOS连接时,对外则输出0v低电平,所以这时可以给LED灯外接一个5v电压,从而实现点灯。 在这里插入图片描述 可以看出在推挽输出下,小灯是由来之芯片的电压来驱动,而开漏输出下,则没有内部驱动能力,都是依靠外部电压源来驱动。 在这里插入图片描述 需要注意的是:这里我们需要用支持5V容忍的IO口,否则会使上方保护二极管长期导通,将5V引入电源中造成损坏。

输出驱动器: 对于输出控制模块,它有两个控制指令的来源,一个是我们使用HAL库的函数控制的输出寄存器 ,而另一个则是我们后面将会学习的片上外设,例如串口模块、I2C模块等,因而根据控制来源的不同,STM32将两种输出模式又细分成了普通的推挽输出和开漏输出,以及复用推挽输出与复用开漏输出。 在这里插入图片描述

输出驱动器: 在这里插入图片描述 后面的肖特基触发器用于稳定电平,处理后的电平信号被写入输入数据寄存器,等待我们使用HAL库的函数对寄存器进行读取,这就是最基本的GPIO口读取高低电平的原理。注意到这条线路中有两个分支,第一条分支通向了模拟输入,浮空、上拉、下拉这三种输入模式都是仅读取了高低电平,也就是数字信号,而模拟输入则是读取输入电压的具体数值,因此在触发器前产生分支,将电压引入了模拟输入相关的片上外设,将会在以后的ADC相关知识了解到;

另一条支线则是在触发器后,接入了例如串口模块等需要数字输入的片上外设,这里要注意的是:输入部分的不同分支可以同时读取触发器的输出,因此不会出现复用上拉输入等模式,而是在片上外设上也使用普通的输入模式即可。

赞(0)
未经允许不得转载:171主机测评 » stm32 GPOI(hal库)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址