STM32L431-GPIO系列代码的运用-HAL库

在STM32CUBEIDE的图形配置中,可以看到,GPIO有4种可以配置的选项,分别是GPIO_INPUT,GPIO_OUTPUT,GPIO_ANALOG和GPIO_EXTIx。
在这里插入图片描述

1.GPIO_input

这个功能比较简单,就是配置一个GPIO的输入引脚,用来检测输入信号是否是高低电平,需要配置的功能也很少,只需要配置是否是否需要上下拉电阻。
在这里插入图片描述
所用到的函数为:GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
举例:if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
该代码就是判断,GPIOA的GPIO_PIN_0是否高电平

2. GPIO_Output

GPIO常见的功能,输出功能。主要就是用来输出高低电平,例如驱动LED灯,或者是驱动三极管。
在这里插入图片描述

2.1 GPIO output level

这个配置主要是用到设置该引脚的默认输出是高电平还是低电平

2.2 GPIO mode

这个配置有两种选项可以进行配置
在这里插入图片描述
第一个是推挽输出,可以理解为单片机内部输出电压,驱动外部电路。一般的LED灯控制都是通过该引脚模式进行控制的。
第二个是开漏输出,该引脚只有断路和接地这两个状态,所以需要上拉电阻来进行外部供电驱动外部电路。开漏输出引脚很特别,可以检测引脚的高低电平,所以在模拟I2C电路上,普遍使用这个配置。

2.3 GPIO Pull-up/Pull-down

配置引脚的上下拉电阻

2.4 Maximun output speed

配置引脚的输出速度,按照默认的就行。目前还不知道在哪个项目中需要配置该选项

2.5 常用函数

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
这个函数用来写入引脚驱动高低电平的。
举例:HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_SET);
说明:将GPIOA的0脚1脚配置为高电平

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
这个函数是用来翻转某个引脚的电平的。
举例:HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);
说明:将GPIOA的0脚的电平翻转

3.GPIO_Analog

暂时还没有用到过

4.GPIO_EXITx

GPIO的中断配置,一般有上升沿、下降沿中断触发和上升沿、下降沿事件触发
在这里插入图片描述
一般是用来检测按键输入从而触发中断来进行一些相关操作的

4.1 GPIO mode

在这里插入图片描述
1.External Interrupt Mode with Rising edde trigger detection
该模式只检测引脚上升沿信号,从而触发中断信号
2.External Interrupt Mode with Falling edde trigger detection
该模式只检测引脚下降沿信号,从而触发中断信号
3.External Interrupt Mode with Rising/Falling edde trigger detection
该模式检测引脚上升沿下降沿信号,从而触发中断信号
4.External Event Mode with Rising edde trigger detection
该模式只检测引脚上升沿信号,从而触发事件
5.External Event Mode with Falling edde trigger detection
该模式只检测引脚下降沿信号,从而触发事件
6.External Event Mode with Rising/Falling edde trigger detection
该模式检测引脚上升沿下降沿信号,从而触发中断信号
6个模式中,使用比较多的应该是前面3个,后面3个的与事件相关,暂时没有用到

4.2 GPIO Pull-up/Pull-down

配置引脚的上下拉电阻

4.3 需要注意的东西

在图形配置界面,需要在GPIO窗口配置好后,再去NVIC中,打开中断,否则无法进入到中断中
在这里插入图片描述
如果不在图形窗口中配置,则需要在以下的地方,添加一些东西,比如需要添加中断3

  1. 在stm32l4xx_it.c中,添加函数:
void EXTI3_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI3_IRQn 0 */
  /* USER CODE END EXTI3_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
  /* USER CODE BEGIN EXTI3_IRQn 1 */
  /* USER CODE END EXTI3_IRQn 1 */
}
  1. 在stm32l4xx_it.h中,添加函数:
    void EXTI3_IRQHandler(void);
  2. 在gpio.c中,添加函数:此添加的函数,在图形界面配置过也需要添加
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_3)
	{
		//添加需要的函数,该判断只能判断是哪个PIN脚触发,具体是GPIOA还是GPIOB,需要再自行进行编写判断函数
	}
	
}
  1. GPIO的初始化:
 __HAL_RCC_GPIOA_CLK_ENABLE();
  GPIO_InitStruct.Pin = GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI3_IRQn);
  1. 说明:
    并不是所有的引脚都是EXTIx的形式,目前是这几个:EXTI0、EXTI1、EXTI2、EXTI3、EXTI4、EXTI9_5、EXTI15_10
    按需添加外部中断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值