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

一、配置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库是如何将这些东西进行封装调用的(后续更新…)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值