STM32cubemx——HAL库学习笔记 一、GPIO的设置

  • Post author:
  • Post category:其他



一、配置STM32cubeMX工程


在配置好时钟和保存一系列操作以后单击想要设定的引脚

在这里插入图片描述

当我们只将它用作普通IO口时,我们一般只选择输入和输入模式。

设定完以后我们点击GIPIO进入IO的初始设置。

在这里插入图片描述

GPIO mode :GPIO的工作状态,输入还是输出

GPIO Pull-up/Pull-down:设置GPIO的工作状态,推挽还是开漏或者悬空。

User Label :设置用户标签,也就是在工程中设定一个名字

在这里插入图片描述


二、GPIO的技术讲解


在这里插入图片描述

上图为GPIO的基本结构,推挽和开漏的实现是通过下图两个MOS实现的,一般状态下我们是使用的推挽模式,当使用的开漏模式时我们需要在外部接上上拉电阻,因为它并不能直接输出高电平的。所以要有外拉电阻辅助。

两种工作模式的区别。

在这里插入图片描述


三、HAL库函数的调用


以下是三个基本的函数

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)  

//读取电平状态 参数:GPIOx所在的组号,GPIO_Pin具体引脚 返回值:bitstatus(0或者1是个枚举)

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)  

//取反引脚电平 参数:GPIOx所在的组号,GPIO_Pin具体引脚

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

//给引脚写高低电平 参数:GPIOx所在的组号,GPIO_Pin具体引脚,高或者低(枚举GPIO_PinState)


四、HAL库实现控制GPIO相关寄存器的方法


首先我们看到一个结构体

在这里插入图片描述

然后我们拿GPIOB打比方,我们可以看到有一个宏定义,而这个宏定义是将另一个宏定义(这是GPIOB的基地址)进行了强制转换

#define GPIOB ((GPIO_TypeDef *)GPIOB_BASE)

而这个基地址又是由另一个基地址和GPIOB的偏移量组成,由此可以发现一个APB2PERIPH_BASE,证明GPIOB挂载在APB2上

#define GPIOB_BASE (APB2PERIPH_BASE + 0x00000C00UL)

将这个基地址进行结构体的强制转换以后,这个结构体中的成员将有这个基地址进行逐个偏移,假设这个基地址为0x00000000。那么CRH为0x00000004。偏移量由成员类型决定。这种控制方法是stm32最为常见的一种方式。后面的讲解也会有很多这种类似的方法就不做过多的介绍。


五、HAL库是如何将这些东西进行封装调用的(后续更新…)



版权声明:本文为qq_39266462原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。