STM32基于HAL库的GPIO口控制开发与应用(2)

一、GPIO口是在单片机开发应用中使用最频繁的一个控制。GPIO口可作为输出高低电平也可以作为输入检测输入电平的高低。

(1)通常GPIO口输出控制LED灯、有源蜂鸣器等一些只需要高低电平就可以触发的模块。

(2)通常GPIO口作为输入,用来检测输入电平的高低状态,常用于一些模块在触发时候会输出高低电平时GPIO口输入用来检测(例如:按键开关),也可以用于一些简单通讯,例如在与OpenMv摄像头相连接,当OpenMv摄像头识别到东西设置某个引脚输出高电平,STM32接收到高电平就做出反应。

二、GPIO口在STM32CubeMx中的配置

(1)RCC、SYS、时钟树等基础配置见本系列(1)文章。(4条消息) STM32基于HAL库的开发与应用(1)STM32CubeMx基本配置_老何希望不掉头发的博客-CSDN博客

(2)鼠标左键点击需要设置GPIO口的引脚会出现对应选项,选择input(输入)、output(输出)、EXIT(中断)等不同选项来配置引脚功能。

引脚上拉下拉情况,看对应开发板的原理图,一般是设置开发板自带的LED灯和按键开关时候才需要设置上拉或下拉。当原理图中显示一边接地话就需要上拉,反之接VCC就要下拉。

 (3)设置好了GPIO口功能后,可以在CubeMx左边选项栏打开GPIO选项,可以显示配置的每个引脚名字以及其功能,点击某个引脚,可以设置其初始状态、上拉下拉状态、引脚重命名等。

 完成以上步骤后配置就完成了接下来就是Keil编程。

三、打开Keil文件,打开main.c。

        在编写Keil文件时,类似C语言编程,首先是预编译(例:#include“stdio.h”)我们编写程序都是在int main(viod)中,其中while(1)内是死循环,常用来编写系统功能,保证系统能够一直运行。在while(1)外面通常编写一些初始化、使能函数。(例:打开中断函数等)。

注意:编写代码一定要在USER CODE BEGIN 到UESR CODE END之间,否则在修改CubeMx配置之后代码会被清除

这边例程就是GPIO口开关控制LED灯亮灭

 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==1)//对引脚pb9进行读取高低电平
		{
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//RESET重置的意思
		}
		else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==0)
		{
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//SET设置的意思
		}
  }
  /* USER CODE END 3 */

四、最后点击编译并烧写。

五、STM32基于HAL库的GPIO控制函数总结

(1)HAL_GPIO_DeInit

功能:这个函数的主要功能是将我们在引脚初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值。

例:HAL_GPIO_DeInit(GPIOx,GPIO_PIN_X);

(2)HAL_GPIO_EXTI_Callback

功能:这个函数是中断回调函数,可以理解为中断函数具体要响应的动作。

例:HAL_GPIO_EXTI_Callback(GPIO_PIN_X);

(3)HAL_GPIO_EXTI_IRQHandler

功能:这个函数是外部中断服务函数,用来响应外部中断的触发。

例:HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_PIN_X);

(4)HAL_GPIO_Init

功能:这个函数主要用来初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。

例:GPIO_InitTypeDef GPIO_Init_Structure;

GPIO_Init_Structure. Pin = GPIO_PIN_10 | GPIO_PIN_11; //选择对PB10和PB11进行设置

GPIO_Init_Structure. Mode = GPIO_MODE_OUTPUT_OD; //设置输出为上拉模式(PP改为OD为开漏)

GPIO_Init_Structure. Speed = GPIO_SPEED_FREQ_HIGH; //速度设置为高速100M

HAL_GPIO_Init(GPIOB,&GPIO_Init_Structure);

(5)HAL_GPIO_LockPin

功能:使用此函数后,当此引脚电平保持为当前状态,并无法更改。

例:HAL_GPIO_LockPin(GPIOX,GPIO_PIN_X);

(6)HAL_GPIO_ReadPin

功能:检测这个引脚当前状态值,函数返回值为0或1。

例:HAL_GPIO_ReadPin(GPIOX,GPIO_PIN_X);

(7)HAL_GPIO_TogglePin

功能:这个函数用来翻转某个引脚的电平状态。

例:HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);

(8)HAL_GPIO_WritePin

功能:这个函数从字面意思来看就是给某个引脚写0或1,但是不要理解成,写1就是使能之类的意思,有些寄存器写1是擦除的意思。

例:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET) //高电平      

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET)//低电平

物联沃分享整理
物联沃-IOTWORD物联网 » STM32基于HAL库的GPIO口控制开发与应用(2)

发表评论