其中PC1、PC13口开关接地,PA0开关口接电源,故PC1/13为下拉,下降沿触发,PA0为上拉,上升沿触发
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2; //使能GPIOA时钟
RCC->APB2ENR|=1<<4; //使能GPIOB时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
//具体配置需要看寄存器手册
GPIOA->CRL&=0XFFFFFFF0;//PA0设置为输入
GPIOA->CRL|=0X00000008; //上、下拉模式
GPIOC->CRH&=0XFF0FFFFF;//PC13设置为输入
GPIOC->CRH|=0X00800000; //上、下拉模式
GPIOC->CRL&=0XFFFFFF0F;//PC1设置为输入
GPIOC->CRL|=0X00000080; 上、下拉模式
GPIOC->ODR|=1<<13; //PC13设置为下拉
GPIOC->ODR|=1<<1; //PC1设置为下拉
//PA0默认为上拉
Ex_NVIC_Config(GPIO_A,0,RTIR); //PA0上升沿触发
Ex_NVIC_Config(GPIO_C,13,FTIR);//PC13下降沿触发
Ex_NVIC_Config(GPIO_C,1,FTIR);//PC1下降沿触发
MY_NVIC_Init(2,3,EXTI15_10_IRQChannel,2);//抢占优先级2,从优先级3,组2
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占优先级2,从优先级2,组2
MY_NVIC_Init(2,1,EXTI1_IRQChannel,2); //抢占优先级2,从优先级2,组2
}
void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY2==1) //按键2
{
LED0=!LED0;
LED1=!LED1;
}
EXTI->PR=1<<0; //清除LINE0上的中断标志位
}
void EXTI1_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY0==0) //按键0
{
LED1=!LED1;
}
EXTI->PR=1<<1; //清除LINE1 上的中断标志位
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY1==0) //按键1
{
LED0=!LED0;
}
EXTI->PR=1<<13; //清除LINE13上的中断标志位
}
其中PC1、PC13口开关接地,PA0开关口接电源,故PC1/13为下拉,下降沿触发,PA0为上拉,上升沿触发
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2; //使能GPIOA时钟
RCC->APB2ENR|=1<<4; //使能GPIOB时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
//具体配置需要看寄存器手册
GPIOA->CRL&=0XFFFFFFF0;//PA0设置为输入
GPIOA->CRL|=0X00000008; //上、下拉模式
GPIOC->CRH&=0XFF0FFFFF;//PC13设置为输入
GPIOC->CRH|=0X00800000; //上、下拉模式
GPIOC->CRL&=0XFFFFFF0F;//PC1设置为输入
GPIOC->CRL|=0X00000080; 上、下拉模式
GPIOC->ODR|=1<<13; //PC13设置为下拉
GPIOC->ODR|=1<<1; //PC1设置为下拉
//PA0默认为上拉
Ex_NVIC_Config(GPIO_A,0,RTIR); //PA0上升沿触发
Ex_NVIC_Config(GPIO_C,13,FTIR);//PC13下降沿触发
Ex_NVIC_Config(GPIO_C,1,FTIR);//PC1下降沿触发
MY_NVIC_Init(2,3,EXTI15_10_IRQChannel,2);//抢占优先级2,从优先级3,组2
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占优先级2,从优先级2,组2
MY_NVIC_Init(2,1,EXTI1_IRQChannel,2); //抢占优先级2,从优先级2,组2
}
void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY2==1) //按键2
{
LED0=!LED0;
LED1=!LED1;
}
EXTI->PR=1<<0; //清除LINE0上的中断标志位
}
void EXTI1_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY0==0) //按键0
{
LED1=!LED1;
}
EXTI->PR=1<<1; //清除LINE1 上的中断标志位
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY1==0) //按键1
{
LED0=!LED0;
}
EXTI->PR=1<<13; //清除LINE13上的中断标志位
}
举报