简单易懂的STM32外部中断实现按键输入判断

简单的按键输入中断判断方法

1.了解按键的接线。常见的按键接线方式是:按键一端接到MCU,另外一端接到GND。如下图所示:
在这里插入图片描述

2.第一部分按键引脚初始化程序:需要结合你的电路图。本文中的按键连接到PC6,所以初始化STM32中C组的第6引脚为输入。

第二部分是NVIC初始化:
设置中断源:哪一个引脚就对应哪一个中断源。
设置IRQ通道:每一个引脚对应的通道不一样,可以跳转到stm32f10x.h文件中查看。
分配抢占优先级和响应优先级。注意一个工程的NVIC分组是同一个,对应的设置可以查看NVIC表格(网上有很多,可自行查找)。

第三部分:外部中断的配置。
配置外部中断线。每一个引脚对应一条中断线。
配置中断方式:中断或是事件。
配置边沿触发:上升沿、下降沿、边沿。

/*
 *功能:KEY初始化
 * 参数:无
 * 返回值:无
 */
void KEY_Init(void)
{ 
		EXTI_InitTypeDef EXTI_InitStruct;
		NVIC_InitTypeDef NVIC_InitStruct;
		GPIO_InitTypeDef GPIO_InitStruct;
		
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
		
		/************* 第一部分 **************/
		GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
		GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;	
		GPIO_Init(GPIOC, &GPIO_InitStruct);

	
		/************* 第二部分 **************/
		GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);
		NVIC_InitStruct.NVIC_IRQChannel=EXTI9_5_IRQn;
		NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
		NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
		NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
		NVIC_Init(&NVIC_InitStruct);
		
		/************* 第三部分 **************/
		EXTI_InitStruct.EXTI_Line=EXTI_Line6;
		EXTI_InitStruct.EXTI_LineCmd=ENABLE;
		EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
		EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;
		EXTI_Init(&EXTI_InitStruct);
}

3.中断服务程序,在中断处理函数里面可以实现简单的处理程序。尽量不要在里面处理太多东西,内容尽量的少。

//按键中断服务程序
void EXTI9_5_IRQHandler(void)
{
   if(EXTI_GetITStatus(EXTI_Line6) != RESET)  //检测是否触发对应的中断
    {
       delay_ms(10);
        key1_on=~key1_on;
			
			if(key1_on)
			{
				LCD_ShowString_12X24(24*6,5, "LED", White, Black,1);
			}
			else
			{	
				LCD_ShowString_12X24(24*6,5, "   ", White, Black,1);
			}
    }
		EXTI_ClearITPendingBit(EXTI_Line6);
}

注意:可能遇到的问题
问题:按键反应太过灵敏,有时候按一次会触发多次。
解决:在按键的两端(上图中的4和2)连接一个104电容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值