零基础STM32开发第二篇按键中断

零基础STM32开发第二篇按键中断

前言

上一篇说了STM32如何点亮一盏led灯,现在要开始玩按键了,毕竟灯或者其他设备需要按键什么的来控制的,用按键点击事件来做个小demo,正好学一下中断。因为有了中断的存在就可以更合理利用CPU的资源了,CPU轮循没有用的任务属于浪费资源,不如让CPU跑自己的任务,如果其他事件来了,CPU跑去执行中断事件,执行完了继续做自己的事情。
通俗点说:
我在看电视,这时来了个电话,我去接电话,接完电话继续回来看电视。而不是看一眼电视,再去打电话,再回来看电视,在打电话,一直轮循。这就是中断。

中断测试开始

拿我做的开发板4个按键测试,4个key对应GPIO,PA9-PA12 ,CUBEMAX配置4个中断模式
在这里插入图片描述

中断优先级调成1
在这里插入图片描述
中断下降沿捕获,因为原理图中按键按下接地,是下降沿触发
在这里插入图片描述在这里插入图片描述

生成代码
找到中断函数重写
在这里插入图片描述

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//重写中断函数
{
	if(GPIO_Pin==GPIO_PIN_11)
	{
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);//灯全部熄灭
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,GPIO_PIN_RESET);//亮led0
		HAL_Delay(2000);
	}
	if(GPIO_Pin==GPIO_PIN_10)
	{
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);//灯全部熄灭
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,GPIO_PIN_RESET);//亮led1
		HAL_Delay(2000);
	}
	if(GPIO_Pin==GPIO_PIN_9)
	{
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);//灯全部熄灭
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,GPIO_PIN_RESET);//亮led2
		HAL_Delay(2000);
	}
	if(GPIO_Pin==GPIO_PIN_12)
	{
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);//灯全部熄灭
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_RESET);//亮led3
		HAL_Delay(2000);
	}

}

现象

现象正常会跑流水灯轮循,对应按键事件会触发相应中断事件,轮循终止,点亮一盏灯2S,执行完继续回来跑流水灯。
在这里插入图片描述

测试结果

KEY1键不好使(PA10)其他正常。
下一篇测试串口以及串口中断

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好!以下是如何在STM32上编写按键中断程序的步骤: 1. 首先,需要确定使用的按键的引脚和对应的GPIO端口。根据STM32芯片型号和具体硬件设计,可以查找对应的引脚和GPIO端口的信息。 2. 在程序中,需要初始化对应的GPIO端口为输入模式,以使其能够接受按键的输入信号。可以使用STM32提供的库函数进行初始化。 3. 接下来,需要设置对应GPIO端口的中断触发方式,以便在按键被按下时,能够触发中断。可以使用STM32提供的库函数进行设置。 4. 定义中断服务函数,在按键被按下时执行相应的操作。可以在中断服务函数中编写相应的代码,比如改变LED的状态等。 5. 在主函数中,开启中断并等待按键中断的发生。可以使用STM32提供的库函数进行中断开启。 以上是在STM32上编写按键中断程序的基本步骤,希望能对您有所帮助! ### 回答2: STM32是一种具有强大功能的微控制器系列,它采用了ARM Cortex-M内核,并且广泛应用于各种嵌入式系统中。下面我将提供一个大致的按键中断编程示例。 首先,我们需要将按键连接到STM32开发板上的某个IO口上。假设我们使用的是GPIOA的第0号引脚作为按键输入口。 接下来,我们需要在STM32的引脚配置寄存器中,将GPIOA的引脚0配置为输入模式。可以通过修改GPIOA_MODER寄存器来实现: GPIOA->MODER &= ~(GPIO_MODER_MODE0); // 将第0号引脚的MODER位清零 GPIOA->MODER |= (GPIO_MODER_MODE0_0); // 设置第0号引脚为输入模式 然后,我们需要在STM32中使能外部中断。在这个例子中,我们将使用外部中断线0,对应于EXTI0_IRQn。 EXTI->IMR |= (EXTI_IMR_MR0); // 使能外部中断线0 EXTI->FTSR |= (EXTI_FTSR_TR0); // 配置为下降沿触发 接下来,我们需要编写中断服务程序,当按键被按下时,该中断服务程序将被调用。 void EXTI0_IRQHandler(void) { if(EXTI->PR & EXTI_PR_PR0) // 检查外部中断线0的中断标志位 { // 执行按键按下后的操作 // 这里可以编写按键按下后需要执行的代码 EXTI->PR |= (EXTI_PR_PR0); // 清除中断标志位 } } 最后,我们需要在主程序中将中断服务程序注册到对应的中断向量中。 NVIC_EnableIRQ(EXTI0_IRQn); // 使能外部中断线0的中断 NVIC_SetPriority(EXTI0_IRQn, 0); // 设置中断优先级 通过以上步骤,我们就可以实现按键中断功能。当按键被按下时,中断服务程序将被执行。我们可以在中断服务程序中编写相应的代码,来处理按键按下后的操作。 ### 回答3: STM32按键中断程序的基本步骤如下: 1. 首先,需要配置GPIO作为输入引脚,用于连接按键。可以选择合适的GPIO引脚,并设置为输入模式。 2. 配置NVIC(Nested Vectored Interrupt Controller),使能外部中断。选择适当的中断线、中断优先级等配置。 3. 配置外部中断触发方式。可以选择上升沿触发、下降沿触发或双边沿触发。根据实际需求配置。 4. 实现中断服务程序。当按键产生中断时,MCU会自动跳转到中断服务程序。在中断服务程序中,可以对按键事件进行处理。 5. 根据实际需求,可以在中断服务程序中进行按键的消抖处理。可以通过软件延时或硬件电路设计等方式进行按键消抖。 6. 根据需要,在中断服务程序中进行按键事件的处理。可以通过编写逻辑代码来实现按键的各种功能操作,比如控制LED灯的亮灭等。 7. 最后,记得在主函数中使能全局中断,以便正常触发和处理按键中断。 以上是编写STM32按键中断程序的基本步骤。根据具体的开发环境和需求,可以根据以上步骤进行相应的配置和编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值