当前位置: 首页 > news >正文

STM32 HAL库函数学习 GPIO篇

1、void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, const GPIO_InitTypeDef *pGPIO_Init)

GPIO外设属于是任何芯片的最基础功能 ,STM32各个系列的GPIO初始化都是一致的,有不同的是部分系列在IO复用使用了单独一个成员属性Alternate 来表明这个IO的具体复用功能,但是一些旧系列并没有这个属性,因此在编写程序时需要注意本系列单片机是否存在这个属性。

static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();  //使能需要使用的GPIO组的时钟__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5; //选择使用的GPIO管脚GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  //选择使用的模式GPIO_InitStruct.Pull = GPIO_NOPULL;          //选择上下拉模式GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //选择GPIO的速度HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);}

2、void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)

GPIO的复位配置函数,函数传参同上。值得注意的是STM32调用此函数之后对应的GPIO口的配置被恢复到未配置之前的状态也就是模拟输入模式,这也是STM32所有的IO上电或者复位后的初始化模式。

3、GPIO_PinState HAL_GPIO_ReadPin(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

读取IO口的电平状态函数,此函数不区分GPIO的输入输出模式,电平状态都可以直接读取。

    if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4) == GPIO_PIN_SET){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);}else{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);}

4、void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

GPIO口的输出电平设置,只能使用在GPIO口为输出模式的情况下。

//设置(输出)高电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//设置(输出)低电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);

5、void HAL_GPIO_WriteMultipleStatePin(GPIO_TypeDef *GPIOx, uint16_t PinReset, uint16_t PinSet)

同组GPIO多个IO同时控制函数,本函数可以对同一组的IO口两种电平状态同时输出。相当于控制多个IO设置高电平和设置低电平一条函数完成。前提是必须同一个GPIO组。并非所有的系列都可以使用本函数。

		 HAL_GPIO_WriteMultipleStatePin(GPIOB,GPIO_PIN_4,GPIO_PIN_5);
//设置GPIOB4低电平 设置GPIOB5高电平
//相当于
//设置PB5(输出)高电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//设置PB4(输出)低电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);

优点是是一条语句可以替代多条语句,IO口可以通过或运算组合,另外本函数操作属于原子操作,无法被中断打断,这在有操作系统和实时控制行业中非常有用。

6、void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

GPIO口翻转目前电平状态的函数,属于经常使用的重点函数。常用在控制LED灯闪烁的场景。

void HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
//让PB4输出当前电平状态相反的电平

7、HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

GPIO口配置锁死函数。其目的是为了防止在配置好IO口后在程序中其他地方再次修改IO的配置造成故障,使用本函数后当前的IO模式不能被修改,除非程序复位后才能修改。

HAL_GPIO_LockPin(GPIOB,GPIO_PIN_4);
//GPIOB4 的当前的配置无法被修改

8、void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

外部中断请求处理函数,首先配置GPIO的模式为上升沿或者下降沿监测,GPIO口作为中断口使用的时候不属于复用功能。随后设置外部中断线的优先级并启动本中断。STM32 中一旦开启了中断即必须有对应的中断服务函数,否则可能会造成死机。

​​在HAL_GPIO_EXTI_IRQHandler函数中会调用一个回调函数来完成最终的中断处理,因为不同系列调用的回调函数不一致,因此需要打开本函数内部找到具体调用哪一个回调函数。例如在H5系列中回调函数区分上升沿和下降沿,按照需要调用。

  __HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_0;GPIO_InitStruct.Pull = GPIO_PULLDOWN;GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);HAL_NVIC_SetPriority(EXTI0_IRQn,0,1);  //设置优先级HAL_NVIC_EnableIRQ(EXTI0_IRQn);        //开启外部中断void EXTI0_IRQHandler()  //中断服务函数
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//响应中断请求函数
}void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{switch(GPIO_Pin){case GPIO_PIN_0://具体任务实现break;}
}
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{}

相关文章:

  • Kotlin中的::操作符详解
  • Kotlin 中集合遍历有哪几种方式?
  • Kotlin委托机制使用方式和原理
  • 再见Notepad++,你好Notepad--
  • MATLAB语言教程:从入门到精通的全面指南
  • 【HarmonyOS 5】鸿蒙应用px,vp,fp概念详解
  • ES中must与filter的区别
  • Elasticsearch的集群管理介绍
  • ElasticSearch简介及常用操作指南
  • django项目开启debug页面操作有数据操作记录
  • Starrocks 物化视图的实现以及在刷新期间能否读数据
  • 记一次 Starrocks be 内存异常宕机
  • R语言在生物群落数据统计分析与绘图中的实践应用
  • 拉取gitlab项目
  • 零基础设计模式——结构型模式 - 代理模式
  • YOLO12改进-模块-引入AFE模块 增强模型对复杂场景(如杂乱背景、小目标、半透明物体)的特征提取能力
  • python2解决反编译乱码
  • 数值计算与数据相关参数剖析:保障模型训练稳定与准确
  • Selenium基础操作方法详解
  • 题目 3298: 蓝桥杯2024年第十五届决赛真题-兔子集结
  • 高质量的南京网站建设/seo学习
  • 党建网站怎么做/网络推广员压力大吗
  • 毕节公司做网站/百度公司推广
  • 那些做测评的网站好/免费手游推广平台
  • 英文淘宝网站建设/seo快速排名软件案例
  • 医院网站建设投标书/百度推广退款电话