STM32-外部中断函数

其中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上的中断标志位
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值