stm32CubeIde外设学习--外部中断(探索者F407ZG)

什么是中断

中断执行机制,简单概述为三步:

1 中断请求

2 响应中断 

3 退出中断

外部中断的介绍:

检测GPIO口电平信号,当检测到指定的电平变化时,触发外部中断,执行中断服务函数

 实战分析

目的:使用外部中断线,实现KEY_UP控制BEEP相停,KEY1控制LED1翻转,KEY0控制LED0翻转。

知识点:使用外部中断 检测按键的状态

外部中断线只能有一个pin(晚点查资料补全

步骤1:(参照原理图设置GPIO)

原理图中,KEY-UP外接是3.3v,故当按键按下时,PA0口接受到高电平,故设置上边沿触发

同理,其余三个按键是接GND,导通后是低电平,设置为低电平触发。

步骤2:配置中断(使能中断—设置中断优先级)

此处涉及到知识点:中断(中断优先级)可以参考如下文章进行学习,本次重点学习如何使用,后面详细学习。

STM32--中断使用(超详细!)_stm32中断-优快云博客

步骤3 生成代码

步骤4 寻找中断回调函数

4-1 打开stm32f4xx_it.c

4-2任选其中的一个中断服务函数,点击"Open Declaration"

4-3 找到下面这个回调函数(知识:带有_weak表示用户能够自己定义函数),并且复制到mian

函数里面。

代码如下:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	HAL_Delay(10); //加入delay函数时模拟按键进行消抖,但是注意这个函数借助sys滴答定时器进行延时
//故配置中断优先级要把sys滴答定时器配置在外部中断线前面
	switch(GPIO_Pin)
	{
	case KEY_UP_Pin:
		if(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin) == GPIO_PIN_SET)
		{
			BEEP_TOGGLE();
			break;
		}
	case KEY_0_Pin:
		if(HAL_GPIO_ReadPin(KEY_1_GPIO_Port,KEY_1_Pin) == GPIO_PIN_SET)
		{
			LED0_TOGGLE();
			break;
		}
	case KEY_1_Pin:
		if(HAL_GPIO_ReadPin(KEY_2_GPIO_Port,KEY_2_Pin) == GPIO_PIN_SET)
		{
			LED1_TOGGLE();
			break;
		}
	}
}

led.h文件:

#ifndef BSP_LED_LED_H_
#define BSP_LED_LED_H_
#define LED0(x)             HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET):\
							HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_RESET)

#define LED1(x)             HAL_GPIO_WritePin(LED0_GPIO_Port,LED1_Pin,GPIO_PIN_SET):\
							HAL_GPIO_WritePin(LED0_GPIO_Port,LED1_Pin,GPIO_PIN_RESET)

#define LED0_TOGGLE()       HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin)
#define LED1_TOGGLE()       HAL_GPIO_TogglePin(LED0_GPIO_Port,LED1_Pin)
#endif /* BSP_LED_LED_H_ */

beep.h文件:

#ifndef BSP_BEEP_BEEP_H_
#define BSP_BEEP_BEEP_H_

#define BEEP(x)         x?  HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_SET):\
							HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_RESET)

#define BEEP_TOGGLE()       HAL_GPIO_TogglePin(BEEP_GPIO_Port,BEEP_Pin)
#endif /* BSP_BEEP_BEEP_H_ */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值