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

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不断清零重新计数?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
STM32VBT6
1楼-- · 2019-10-15 18:45
定时器计数器清零?
直接一个    TIM_SetCounter(TIM3, 0);不就得了?
ArchiChain
2楼-- · 2019-10-15 22:18
 精彩回答 2  元偷偷看……
ArchiChain
3楼-- · 2019-10-16 00:32
确认usart中断周期比设置的定时器周期短。
正点原子
4楼-- · 2019-10-16 06:07
设置CNT的值为0就是了.
ArchiChain
5楼-- · 2019-10-16 06:24
回复【3楼】STM32VBT6:
---------------------------------
谢谢大侠,我也刚搜到这个,
在USART里面使能TIM3 ,再设TIM_SetCounter(TIM3,0);但还是实现不了我要的功能。不知道什么原因?
ArchiChain
6楼-- · 2019-10-16 07:15
回复【4楼】正点原子:
---------------------------------
理论上我不断进入usart中断把tim3的cnt清了应该就不会产生溢出中断了吧?但现在实现不了这个功能。

一周热门 更多>