赞
踩
一、配置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库是如何将这些东西进行封装调用的(后续更新…)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。