请教定时器中断中更新中断和计数器中断的区别问题

2019-07-21 07:21发布

            
书上给的例子是500ms的计时,每次传入的形参是4999(arr),那意思是不是就是每次从4999开始递减,减到0便进入中断,可是也没见设置计数器的计数方向是向下计数,还有这个更新中断和计数器中断有什么区别,为啥这里面还要弄一个允许更新中断。比喻51里面,我给一个重装值,使能定时器中断允许位,那么当这个数加到了65536就可以触发定时器中断。类比STM32,对于那个计数方向的设置和其他相关使能位还能理解,但是对于冒出这么一个更新中断很是不理解,不知道他放在这里有啥优点,又能解决啥问题。


上面这个图是不是也说明计数器溢出自己就会触发中断,不需要弄个更新事件中断?拜托学懂了的人帮忙提点一下。谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
33条回答
BULELJ
2019-07-22 08:42
回复【7楼】正点原子:
---------------------------------
原子哥,我这想用定时器1作为定时器3的主定时器,并且在定时器3的终端里完成相应的功能,
RCC->APB1ENR|=1<<1;     // TIM3时钟使能    
TIM3->ARR=40000; // 设定计数器自动重装值, 是40000个MCLK时钟
TIM3->SC=0;
TIM3->SMCR=0x0007; // Timer1的OC1的更新事件来触发 
TIM3->DIER|=0X41;   //允许触发中断,更新中断
 MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占2,子优先级2,组2
中断函数
void TIM3_IRQHandler(void)
{              
if(TIM3->SR&0x00001) //更新中断UIF
{
biaoji=1;
}
 TIM3->CR1&=~(0x01); //停止定时器3
 TIM3->SR&=~(1<<0);//清除中断标志位
}
这样设置对吗?而且我的程序里面USB的中断返回不了,USB_istr()这个函数一直在执行。不知什么情况。

一周热门 更多>