定时器捕获实验

2019-07-20 07:00发布

下面为定时器捕获实验;实验主要内容为每秒钟捕获采集发动机转速,转速信号为高电平数字信号,程序内容为寄存器版本void Timer3_Config(u16 arr,u16 psc)
{
       
        RCC->APB1ENR|=1<<1;        //TIM3时钟使能
        RCC->AHB1ENR|=1<<2; //PORTC时钟使能
        GPIO_Set(GPIOC,PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用上拉
        GPIO_AF_Set(GPIOC,8,2);        //PC8,AF2

        TIM3->ARR=arr;                 
        TIM3->PSC=psc;                   
}

void  Timer3_ENInt(void)
{
        TIM3->CCMR2|=1<<0;                //CC3S=01         &#209;&#161;&#212;&#241;ê&#228;è&#235;&#182;&#203; IC1ó3é&#228;μ&#189;TI1é&#207;
        TIM3->CCMR2|=0<<4;                 //IC3F=0000 &#197;&#228;&#214;&#195;ê&#228;è&#235;&#194;&#203;2¨&#198;÷ 2&#187;&#194;&#203;2¨
        TIM3->CCMR2|=0<<2;         //IC3PS=00         &#197;&#228;&#214;&#195;ê&#228;è&#235;·&#214;&#198;μ,2&#187;·&#214;&#198;μ
       
        TIM3->CCER|=0<<9;                        //CC3P=01
        TIM3->CCER|=1<<8;                 //CC3E=1        
       
        TIM3->EGR=1<<0;                       
        TIM3->DIER|=1<<3;              //允许捕获中断       

       
        TIM3->DIER|=1<<0;           //允许更新中断
        MY_NVIC_Init(0,0,TIM3_IRQn,2);//优先级         

}
void Timer3_ENABLE(void)
{
      TIM3->CR1|=0x01;            //定时器更新
}
static         u8 Engine_number=0;
//发动机转速         
void TIM3_IRQHandler(void)
{
        u16 tsr;
        tsr=TIM3->SR;
if(Engine_times<1000||Engine_times==1000)
{
        if(tsr&0X08)//捕获更新标记
        {
                Engine_number++;
               Timer5_ENABLE();
        }
}else
//        if(Engine_times==1000||Engine_times>1000)
        {
                USART1_Send(&Engine_number,1);
                Engine_number=0;
                Engine_times=0;
                TIM5->CR1=~(1<<0);    //不是能定时器5
                TIM3->SR=0;//清楚中断标记位       
}


程序主要内容为配置定时器3通道3,且当产生捕获标记时开始使能定时器5计数,当超过1S中发送,清空数值关闭定时器5,
目前存在的问题进不去捕获更新标记if里。
不知道是不是配置错误还是程序不完善。
谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。