灵动微电子 MM32
直播中

毀滅者

9年用户 18经验值
擅长:可编程逻辑
私信 关注
[问答]

外部中断程式无任何反应

各位安安
这边有遇到一个有关于外部中断问题想请教大家
(使用MM32F031C8T6)
我尝试用范例改过使用PB0去做外部中断
可是外部中断程式无任何反应(也就是一直都不会主动跳进中断副程式)
但一般的GPIO却有反应这样...
因为解很久...都没有头绪了
想问大家这要怎么解决 不好意思 麻烦各位了
中断程式码如下:
//******************************************************************************
//Function: EXTI_Init:
//Type          :
//******************************************************************************
void EXTI_Init(void){
        RCC->AHBENR|=0x3<<17;
            RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;           //System configuration register enable  
        GPIOB->CRL &= 0xFFFF0FF0;
        GPIOB->CRL |= GPIO_CRL_CNF0_1;
        Ex_NVIC_Config(_EXTI_GPIOB_,0,_EXTI_FTIR_); //下降沿触  
        NVIC_Init(2,0,EXTI0_1_IRQn,2);                                //抢占2,子优先级0,组2         
}
//******************************************************************************
//Function: Ex_NVIC_Config:
//Type          :
//******************************************************************************
void Ex_NVIC_Config(uint8_t p_GPIO,uint8_t p_Bit,uint8_t TRIM){
    uint8_t m_EXTAddr;
    uint8_t m_EXTOffset;
    m_EXTAddr=p_Bit/4;//得到中断寄存器组的编号
    m_EXTOffset=(p_Bit%4)*4;
    //RCC->APB2ENR|=0x01;//使能io复用时钟                        
    SYSCFG->EXTICR[m_EXTAddr]&=~(0x000F<     SYSCFG->EXTICR[m_EXTAddr]|=p_GPIO<     //自动设置
    EXTI->IMR|=1<          //EXTI->IMR = 0;//Disable LINE BITX interrupt
    //EXTI->EMR|=1<仿真的时候无法进入中断!)
    if(TRIM&0x01)EXTI->FTSR|=1<     if(TRIM&0x02)EXTI->RTSR|=1< }         
//******************************************************************************
//Function: EXTI0_1_IRQHandler:
//Type          :
//******************************************************************************  
void EXTI0_1_IRQHandler(void){
        __NOP();
        if( P_B0 == 0){        
                __NOP();
  
          }
     EXTI->PR=1<<0;  //清除LINE0上的中断标志位   
}

回帖(1)

zhu

2018-9-10 09:24:16
//外部中断初始化函数
void EXTIX_Init(void)
{
   
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//外部中断,需要使能AFIO时钟
   
    KEY_Init();//初始化按键对应io模式
    //GPIOB.0          中断线以及中断初始化配置
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
   
    EXTI_InitStructure.EXTI_Line=EXTI_Line0;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//下降沿触发
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);                  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
   
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;                        //使能按键所在的外部中断通道
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;                                        //子优先级1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中断通道
    NVIC_Init(&NVIC_InitStructure);
   
}
void KEY_Init(void)
{
   
    GPIO_InitTypeDef GPIO_InitStructure;
  
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);//使能PORTA,PORTB,PORTC时钟
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PB0,WK_UP
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB0
}
void EXTI0_1_IRQHandler(void)
{
    for(EXTI_DELAY=0;EXTI_DELAY<1000;EXTI_DELAY++);
    if(WK_UP==1)
    {          
        LED2_TOGGLE();   闪灯
    }
    EXTI_ClearFlag(EXTI_Line0);  //清除EXTI0线路挂起位
}

举报

更多回帖

发帖
×
20
完善资料,
赚取积分