当前位置:   article > 正文

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

hal_gpio_togglepin

一、配置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)  
  • 1

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

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)  
  • 1

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

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

//给引脚写高低电平 参数: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库是如何将这些东西进行封装调用的(后续更新…)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/126046
推荐阅读
  

闽ICP备14008679号