标题:
基于stm32的按键中断
[打印本页]
作者:
hhha_
时间:
2021-11-24 09:15
标题:
基于stm32的按键中断
/*********************************************************************************
************************* STM32F103RC开发板******************************
**********************************************************************************
* 文件名称: 例程1 LED跑马灯主函数main() *
* 文件简述:LED跑马灯 *
* 创建日期:2018.03.03 *
* 版 本:V1.0 *
* 作 者:Clever *
* 说 明:有三种方式控制LED亮灭 *
* 声 明:本例程代码仅用于学习参考 *
**********************************************************************************
*********************************************************************************/
#include "stm32f10x_gpio.h"
#include "led.h"
#include "keyint.h"
#include "common.h"
//LED对应IO初始化
//void mydelay(int c)
//{
// int i,j;
// for(;c>=0;c--)
// {
// for(i=0;i<10000;i++)
// for(j=0;j<10000;j++)
// ;
// }
//}
int main( )
{
int i;
LedInit();
KEYInt();
while(1)
{
;
}
}
#include "stm32f10x_rcc.h"
#include "stm32f10x_exti.h"
#include "Led.h"
void KeyGPIOConfig()
{
GPIO_InitTypeDef GPIOKeyInit;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
GPIOKeyInit.GPIO_Pin=GPIO_Pin_5;
GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init (GPIOC,&GPIOKeyInit);
GPIOC->ODR|=(0x01<<5);
GPIOKeyInit.GPIO_Pin=GPIO_Pin_6;
GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init (GPIOC,&GPIOKeyInit);
GPIOC->ODR|=(0x01<<6);
GPIOKeyInit.GPIO_Pin=GPIO_Pin_7;
GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init (GPIOC,&GPIOKeyInit);
GPIOC->ODR|=(0x01<<7);
GPIOKeyInit.GPIO_Pin=GPIO_Pin_8;
GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init (GPIOC,&GPIOKeyInit);
GPIOC->ODR|=(0x01<<8);
GPIOKeyInit.GPIO_Pin=GPIO_Pin_9;
GPIOKeyInit.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init (GPIOC,&GPIOKeyInit);
GPIOC->ODR|=(0x01<<9);
}
void KeyEXTIConfig()
{
EXTI_InitTypeDef EXTIKeyInit;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource7);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource8);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource9);
EXTIKeyInit.EXTI_Line=EXTI_Line5;
EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
EXTIKeyInit.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTIKeyInit);
EXTIKeyInit.EXTI_Line=EXTI_Line6;
EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
EXTIKeyInit.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTIKeyInit);
EXTIKeyInit.EXTI_Line=EXTI_Line7;
EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
EXTIKeyInit.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTIKeyInit);
EXTIKeyInit.EXTI_Line=EXTI_Line8;
EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
EXTIKeyInit.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTIKeyInit);
EXTIKeyInit.EXTI_Line=EXTI_Line9;
EXTIKeyInit.EXTI_Mode=EXTI_Mode_Interrupt;
EXTIKeyInit.EXTI_Trigger=EXTI_Trigger_Falling;
EXTIKeyInit.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTIKeyInit);
}
void KeyNVICConfig()
{
NVIC_InitTypeDef NVICKeyInit;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVICKeyInit.NVIC_IRQChannel|=EXTI9_5_IRQn;
NVICKeyInit.NVIC_IRQChannelPreemptionPriority=0;
NVICKeyInit.NVIC_IRQChannelSubPriority=0;
NVICKeyInit.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init (&NVICKeyInit);
// NVICKeyInit.NVIC_IRQChannel|=EXTI2_IRQn;
// NVICKeyInit.NVIC_IRQChannelPreemptionPriority=0;
// NVICKeyInit.NVIC_IRQChannelSubPriority=0;
// NVICKeyInit.NVIC_IRQChannelCmd=ENABLE;
// NVIC_Init (&NVICKeyInit);
}
void KEYInt(void)
{
KeyGPIOConfig();
KeyEXTIConfig();
KeyNVICConfig();
}
//中断子程序1
void EXTI9_5_IRQHandler()
{
static int a = 0;
if(EXTI_GetITStatus(EXTI_Line5)!=RESET)
{
if(a==0)
{
LedOn(GPIOB,GPIO_Pin_0);
a=1;
}
else if (a==1)
{
LedOff(GPIOB,GPIO_Pin_0);
a=0;
}
EXTI_ClearITPendingBit(EXTI_Line5);
}
else if(EXTI_GetITStatus(EXTI_Line6)!=RESET)
{
if(a==0)
{
LedOn(GPIOB,GPIO_Pin_1);
a=1;
}
else if (a==1)
{
LedOff(GPIOB,GPIO_Pin_1);
a=0;
}
EXTI_ClearITPendingBit(EXTI_Line6);
}
else if(EXTI_GetITStatus(EXTI_Line7)!=RESET)
{
if(a==0)
{
LedOn(GPIOB,GPIO_Pin_2);
a=1;
}
else if (a==1)
{
LedOff(GPIOB,GPIO_Pin_2);
a=0;
}
EXTI_ClearITPendingBit(EXTI_Line7);
}
else if(EXTI_GetITStatus(EXTI_Line8)!=RESET)
{
if(a==0)
{
LedOn(GPIOB,GPIO_Pin_3);
a=1;
}
else if (a==1)
{
LedOff(GPIOB,GPIO_Pin_3);
a=0;
}
EXTI_ClearITPendingBit(EXTI_Line8);
}
else if(EXTI_GetITStatus(EXTI_Line9)!=RESET)
{
LedOff(GPIOB,GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
EXTI_ClearITPendingBit(EXTI_Line9);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1