定时器如何清零从头计数?

2019-10-15 18:36发布

我移植论坛的例程成功开启TIM3并且用示波器测量IO确认周期设定是正确的,现在想在USART中断里面重置计数器,实现有USART接收中断时不产生定时中断,但不知道怎么实现计数器清零。好像设定后指示把周期重置了,但还是不断地进入定时器中断。(SELE0-SET RSR对应一个IO的反转用来测定时器周期)如果我用串口软件一直定时1ms发送数据过来应该sele0是个固定的电平不会反转。

void TIM3_IRQHandler(void)   //TIM3中断处理
{
     if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) //是溢出中断?
    {
    TIM_ARRPreloadConfig(TIM3, DISABLE); //??
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update );  //清溢出标志位
         if(usart1cmdflag==0)
        {
            usart1cmdflag=1;
            SELE0_SET;
        }
        else
        {
            usart1cmdflag=0;
            SELE0_RST;
        }
     }
}

void USART1_IRQHandler(void)
{
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//??????????????
    {
         TIM_Cmd(TIM3, DISABLE);  //先停计数器?
        //禁止ARR预装载缓冲器  
   
TIM_ARRPreloadConfig(TIM3, DISABLE); 
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);//????????±ê??
        TIM3_SetPeriod(20);//设置周期20ms
        TIM_Cmd(TIM3, ENABLE);  //开启定时器
    }
}

我要在USART中断里面怎么设置TIM3 才能使有USART中断的时候TIM3不断清零重新计数?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。