STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态

目录

一、按键输入捕获及外部中断检测按键状态需要掌握的知识

(1)GPIO作为输入时和输入的不同:

(2)上拉输入的意义

(3)stm32f4的外部中断

二、HAL库中操作按键用到的所用到的HAL库函数

三、按键输入点亮熄灭led的示例代码

(1)单纯按键输入控制

(2)使用外部中断点亮熄灭led示例代码

 四、STM32F407VE中所用到的引脚以及STM32CubeMX的配置


面向小白

实现目标:用按键控制led点亮和熄灭

一、按键输入捕获及外部中断检测按键状态需要掌握的知识

(1)GPIO作为输入时和输入的不同:

首先需要了解自己按键是低电平有效还是高电平有效,此处需要配置GPIO口的输入模式。(具体请看我的第一篇笔记)。我使用的是STM32F407VE,按键K1和K2为低电平有效,故此处配置输出模式时应为上拉输入模式,即GPIO_Mode=GPIO_Mode_Input;GPIO Pull-up/Pull-down=GPIO Pull-up;

(2)上拉输入的意义

首先,上拉电阻是为了保证在没有信号输入的时候,IO口保持高电平,若按键为低电平有效,则没有信号的时候,IO应呈现高电平,所以,此处应设置为上拉输入。

同理,下拉电阻是为了保证在没有信号输入的时候,IO口保持低电平,若按键为高电平有效,则没有信号的时候,IO应呈现低电平。
然后再配置一下IO口引脚,初始化即可。作为输入时,不需要配置速度。

(3)stm32f4的外部中断

STM32F4的每个IO都可以作为外部中断的中断输入口,STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第1张图片

                           GPIO和中断线的映射关系图 

而在使用hal库时,具体的外部中断不需要我们自己去配置,直接选择其默认的外部中断,PE3即KEY1选用外部中断3,PE4即KEY2选用外部中断4,导出后会自动生成相应的配置代码,如下图我在cubx的截图

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第2张图片

 STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第3张图片

二、HAL库中操作按键用到的所用到的HAL库函数

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
//设置GPIO的高低电平(默认低电平及低电平点亮)
//其中GPIO_PinState的所对应的分别是GPIO_PIN_SET(亮)和GPIO_PIN_RESET(灭)
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//读取gpio口的电平
void HAL_Delay(uint32_t Delay)
//delay函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
//gpio外部中断函数

三、按键输入点亮熄灭led的示例代码

(1)单纯按键输入控制

if(HAL_ GPIO_ ReadPin(KEY1_ GPIO Port,KEY1_ Pin)==GPIO_ PIN_ RESET)
//查询现在按键的高低电平
{
    HAL_ Delay(10);//消抖

    if(HAL_ GPIO_ ReadPin(KEY1_ GPIO_ Port,KEY1_ Pin)==GPIO_ _PIN_ RESET)//查询按键K1低电平

    {
    HAL GPIO_ WritePin(LED GPIO_ Port,LED_ Pin,GPIO_ PIN SET);//亮
    
    }
}
if(HAL_ GPIO_ ReadPin(KEY2_ GPIO_ Port,KEY2_ _Pin)==GPIO_ _PIN_ RESET)//查询按键K2低电平
{
        HAL_ Delay(10);//消抖

        if(HAL_ GPIO ReadPin(KEY2_ GPIO_ Port,KEY2_ Pin)==GPIO_ _PIN RESET)
        //查询按键K2低电平
        {    

        HAL_ GPIO_ WritePin(LED_ GPIO_ Port,LED_ Pin,GPIO_ PIN_ RESET);//灭
        }
}

(2)使用外部中断点亮熄灭led示例代码

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==KEY1_Pin)
	{
	HAL_GPIO_TogglePin(GPIOA, LED1_Pin);
	}
	if(GPIO_Pin==KEY2_Pin)
	{
		HAL_GPIO_TogglePin(GPIOA, LED2_Pin);
	}
}

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第4张图片

 使用外部中断的时候一定要打开cubx中的中断,如上图

 四、STM32F407VE中所用到的引脚以及STM32CubeMX的配置

找到PE3和PE4,进行以下配置,时钟源默认为外部时钟80mhz即可

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第5张图片

                STM32cubx的芯片引脚配置图

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第6张图片

        官方开源的按键原理图

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第7张图片

                         cubx中对按键所对应引脚的定义

 STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第8张图片

             默认选定的时钟源(72或80MHZ均可)

                   输入后右键会自动设置

配置RCC

STM32HAL库学习之路(二):按键输入捕获及外部中断检测按键状态_第9张图片

你可能感兴趣的:(stm32hal库学习之旅,stm,单片机,stm32,c语言)