书上给的例子是500ms的计时,每次传入的形参是4999(arr),那意思是不是就是每次从4999开始递减,减到0便进入中断,可是也没见设置计数器的计数方向是向下计数,还有这个更新中断和计数器中断有什么区别,为啥这里面还要弄一个允许更新中断。比喻51里面,我给一个重装值,使能定时器中断允许位,那么当这个数加到了65536就可以触发定时器中断。类比STM32,对于那个计数方向的设置和其他相关使能位还能理解,但是对于冒出这么一个更新中断很是不理解,不知道他放在这里有啥优点,又能解决啥问题。
上面这个图是不是也说明计数器溢出自己就会触发中断,不需要弄个更新事件中断?拜托学懂了的人帮忙提点一下。谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
谢谢原子哥,原来是这样!
---------------------------------
原子哥,我这想用定时器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()这个函数一直在执行。不知什么情况。
---------------------------------
原子哥,例程里面有两句
TIM3->DIER|=1<<0; //允许更新中断
TIM3->DIER|=1<<6; //允许触发中断
不能随便同时开启,比如主从模式,如果同时开启了,会一直进触发中断。我在这个问题上困了好长时间。
---------------------------------
这里不需要开2个了。。。
开启更新中断即可。
一周热门 更多>