单片机学习小组
直播中

王刚

7年用户 1265经验值
私信 关注

在T0_EXT(PA7)上装了一个按键,每次按键触发CAPIF中断好几次,并且捕获值一直为零的原因?

我在T0_EXT(PA7)上装了一个按键,每次按键触发CAPIF中断好几次,并且捕获值一直为零

主函数代码如下:int32_t main(void)
{        

    //初始始化部份省略
    NVIC_EnableIRQ(TMR0_IRQn);
    tiMER_Open(TIMER0, TIMER_CONTINUOUS_MODE, 1);
    TIMER_SET_PRESCALE_VALUE(TIMER0, 0);
    TIMER_SET_CMP_VALUE(TIMER0, 0xFFFFFF);
    TIMER_EnableEventCounter(TIMER0, TIMER_COUNTER_FALLING_EDGE);//使能事件计        数模式
    TIMER_EnableCapture(TIMER0, TIMER_CAPTURE_FREE_COUNTING_MODE, TIMER_CAPTURE_FALLING_EDGE);//使能捕获模式
    TIMER_EnableCaptureDebounce(TIMER0);    TIMER_EnableInt(TIMER0);
    TIMER_EnableCaptureInt(TIMER0);               
    TIMER_Start(TIMER0);

    for(;;);
    return 0;
}

中断函数
static int cnt=0;
void TMR0_IRQHandler(void)
{
    if(TIMER_GetCaptureIntFlag(TIMER0) == 1)
    {
        uint32_t au32CAPValue;
        /* Clear Timer0 capture trigger interrupt flag */        
        au32CAPValue = TIMER_GetCaptureData(TIMER0)
        TIMER_ClearCaptureIntFlag(TIMER0);
        printf("capture int_cnt=%d , captureVal=%d \n",cnt++,au32CAPValue);        
                        
    }
}

回帖(1)

fansz

2023-10-21 16:10:30
数器,下降沿计数    GPIO_SetMode(PA, BIT7, GPIO_MODE_INPUT);    GPIO_EnableInt(PA, 7, GPIO_INT_FALLING);//PA7上升沿中断    while(1){    }    return 0;}中断服务函数代码如下:void TMR0_IRQHandler(void){    if(TIMER_GetIntFlag(TIMER0)){        TIMER_ClearIntFlag(TIMER0);        printf("TIMER0 INT!!n");    }   }   void GPIOAB_INT_IRQHandler(void){    if(GPIO_GET_INT_FLAG(PA, BIT7)){        GPIO_CLR_INT_FLAG(PA, BIT7);        printf("GPIO INT!!n");    }  }触发了多次中断并且捕获的值一直为零的原因可能是:  - 按键接错或没有接好  - 中断优先级设置不正确,导致一个中断被多次触发  - 没有正确清除中断标志位  - 按键可能产生了反弹,需要加上中断延时或消抖处理。
举报

更多回帖

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