STM32CubeMX与HAL库开发教程二(GPIO输入/输出)

目录

前言

1、图像化配置GPIO功能

2、GPIO输出的模式配置

3、GPIO输入的模式配置

4、GPIO的HAL库驱动程序


前言

上一章节我讲述了如何使用STM32CubeMX来建立工程,这节就在上一章的基础上来继续深入了解STM32CubeMX和HAL库如何使用,我们就默认基础设置已经配置完毕(时钟与工程管理)

1、图像化配置GPIO功能

在STM32CubeMX的右侧可以在想要配置的引脚处左键来配置它对应的功能,下图就是PA8引脚配置GPIO输出与输入的方法,我们先设置成GPIO_Output输出模式

2、GPIO输出的模式配置

当引脚被设置成输出模式后,我们点击左侧的GPIO同时点击我们需要更改模式的引脚就可以配置它对应的GPIO模式,输出模式可以改变引脚的高低电平,所以我们需要驱动这个引脚时就需要设置成输出模式,例如点亮一个LED灯

GPIO output level   引脚高低电平设置   高/低 (作用为初次上电后更改成需要的电平)
GPIO mode   GPIO模式     推挽输出/开漏输出

推挽输出:作为输出引脚可以提供高低电平两种,速度快,适用于高速输出,驱动能力强,输出电流可以流入与流出,容易控制与使用,通常用来驱动电机或者LED等

开漏输出:作为输出引脚只能提供低电平输出一种,速度慢,只适用于低速输出,驱动能力较弱只能通过上拉电阻来输出高电平,输出电流只能流出不能流入,通常用来驱动I2C或SPI总线


GPIO Pull-up/Pull-dowm   上拉下拉电阻      上拉电阻/下拉电阻/无上拉或下拉

上拉模式:内部连接上拉电阻,悬空时默认高电平

下拉模式:内部连接下拉电阻,悬空时默认低电平

悬空模式:不连接上拉或下拉电阻,悬空时电平不稳定
Maxinum output speed   引脚速度设置   低速/中速/高速
User Label    用户标签   给引脚设置名称  如LED0

3、GPIO输入的模式配置

当我们将引脚配置成输入模式时,它只能配置GPIO上下拉或者浮空输入,GPIO mode已经被固定为输入模式无法更改,输入模式没有更改电平的能力,它可以读取引脚的高低电平,例如我们想要判断按键是否按下就需要设置成输入模式来读取按键的高低电平

4、GPIO的HAL库驱动程序

GPIO引脚的操作主要包括初始化、读取引脚高低电平、设置引脚输出,使用CubeMX生成代码时,GPIO的引脚初始化代码就会自动生成,用户常用的GPIO操作则是调用HAL库代码来完成自己需要的操作

                                                            GPIO HAL库函数

函数名功能描述
HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)GPIO引脚初始化
HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)GPIO反初始化,恢复到复位后的状态
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读取引脚的电平状态、函数返回值为0或1
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);更改引脚的电平,1为高电平0为低电平
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);翻转引脚的电平状态 ,使高低电平转换
HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);锁住引脚电平,比如说一个管脚的当前状态是1,当这个管脚电平变化时保持锁定时的值。

以上驱动程序的头文件在stm32f1xx_hal_gpio.h 函数的对应参数和原型定义都可以在这里找到

PA8引脚这个PA8是什么意思 P指的是Pin  A指的是基地址A 8就是引脚号

GPIO_TypeDef* GPIOx  这个参数的意思就是 GPIO的基地址 设置PA8就可以写成GPIOA

uint16_t GPIO_Pin  这个参数的意思就是GPIO的引脚号  设置PA8就可以写成GPIO_PIN_8

GPIO_PinState PinState 而这个参数只有HAL_GPIO_WritePin()这个函数用上了,意思是GPIO高低电平  可以写成GPIO_PIN_RESET代表低电平GPIO_PIN_SET代表高电平

举几个常用函数例子 以PA8引脚为例

HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8,GPIO_PIN_RESET);

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);

HAL_GPIO_LockPin(GPIOA, GPIO_PIN_8);    
 

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL库STM32CubeMX中的一个软件库,全称为Hardware Abstraction Layer,即硬件抽象层。它提供了一组简化的API函数,用于控制STM32芯片上的所有硬件资源。使用HAL库可以大大简化STM32芯片的开发流程。 下面是STM32CubeMX中使用HAL库教程: 1. 打开STM32CubeMX软件,创建一个新工程。 2. 在“Project Manager”中选择你的芯片类型和芯片型号。 3. 在“Pinout & Configuration”选项卡中选择你需要使用的芯片引脚,并将它们分配给相应的功能。 4. 在“Clock Configuration”选项卡中配置你的时钟。 5. 在“Configuration”选项卡中选择你需要使用的外设,并进行相应的配置。 6. 确认所有配置后,点击“Generate Code”按钮生成代码。 7. 打开生成的工程文件,在“Core”文件夹中找到“main.c”文件。 8. 在“main.c”文件中找到“HAL_Init()”函数,并在它下面添加你的代码。 例如,如果你想在LED灯上闪烁,可以使用以下代码: ```c #include "main.h" #include "stm32f4xx_hal.h" int main(void) { HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); /* Infinite loop */ while (1) { HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); HAL_Delay(1000); } } ``` 在这里,我们使用了HAL库中的函数“HAL_GPIO_TogglePin()”,它可以用来控制GPIO引脚的输出状态。我们还使用了“HAL_Delay()”函数来实现延时。 9. 将代码烧录到STM32芯片上,然后运行它,你会看到LED灯在周期性地闪烁。 这就是使用HAL库STM32CubeMX中进行开发的基本步骤。当然,这只是一个简单的例子,如果你需要使用更复杂的外设,需要进行更多的配置和编程。但是使用HAL库可以让这一切变得更加简单和效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值