稻花香1号 发表于 2020-4-13 11:20

读不到定时器中断状态

为什么读取定时器的SR = 0,但是却能进中断,
在主函数printf打印tmp的
初始化代码 纯文本查看 复制代码void TIM5_Cap_Init(u16 arr,u16 psc)//ch3 pa2
{               
        RCC->APB1ENR|=1<<3;           //TIM5 时钟使能
        RCC->APB2ENR|=1<<2;            //使能PORTA时钟
       
        GPIOA->CRL&=0XFFFFF0FF;        //PA2 清除之前设置
        GPIOA->CRL|=0X00000800;        //PA2 输入   
        GPIOA->ODR|=0<<2;                //PA2 下拉
          
        TIM5->ARR=arr;                //设定计数器自动重装值   
        TIM5->PSC=psc-1;                //预分频器
       
        TIM5->CCMR1=0x0101;                //捕获通道1,2,3,4分别映射到CH1,2,3,4,不滤波,不分频
        TIM5->CCMR2=0x0101;
//        TIM5->CCMR2|=1<<0;                //CC3S=01         选择输入端 IC3映射到TI3上
//         TIM5->CCMR2|=0<<4;                 //IC3F=0000 配置输入滤波器 不滤波
//         TIM5->CCMR2|=0<<2;         //IC3PS=00         配置输入分频,不分频

        TIM5->CCER|=0<<9;                 //CC3P=0        上升沿捕获
        TIM5->CCER|=1<<8;                 //CC3E=1         捕获使能

        TIM5->DIER|=1<<3;           //允许捕获中断                               
        TIM5->DIER|=1<<0;           //允许更新中断       
        TIM5->CR1|=0x01;            //使能定时器5
        MY_NVIC_Init(2,0,TIM5_IRQn,2);//抢占2,子优先级0,组2          
}中断代码
纯文本查看 复制代码void TIM5_IRQHandler(void)        //CH3 PA2
{                   
//        u16 tsr;
//        tsr=TIM5->SR;        //状态寄存器
        if((TIM5->SR & 0X0008) == 1)
        {
//                tmp = TIM5->CNT;
//                debug ++;
        }
        tmp = TIM5->SR;
                debug ++;
       
       
        TIM5->SR = 0;        //清楚中断标志
//        TIM5->SR&=~(1<<0);//清除更新中断标志位        
//        TIM5->SR&=~(1<<3);//清除捕获3中断标志位               
}
页: [1]
查看完整版本: 读不到定时器中断状态