STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
Temp16 = TIM_GetCapture3(TIM4);TIM_SetCompare3(TIM4, Temp16 + 14000);
是这样给比较器赋值的,如果是在CC3的中断里赋的值,是没有问题的.在中断里反转一个引脚可以得到周期的波形.但是如果在另外一个中断里(外部中断)用上面的方法对CC3比较赋值,赋完后的第一次中断不是想要的那个时间.
比如说CC3本来定时是10ms,在它中断后4ms,我在外部中断又对比较器赋5ms的值,理论上CC3应该在5ms后中断.但是实际测出来是在15ms后中断.
为什么?是我操作的问题么?
RE:STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
是这样的在定时器里有预装入和非预装入区别,楼主的的应该是在预装入下改变比较值的,这样就出现了你的情况,要下一次硬件自动装入,请问你的后面几次是按照你的时间中断吗?其实这样是有好处的RE:STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
我看了预装入这个,但是我也没有设置成预装入啊.预装入可能有好处,但是我的应用如果有这个就不行了.
在外部中断改值后第一次不能得到想要的时间,后面如果没有外部中断,则还是按10ms中断.
RE:STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
预装入默认是打开还是关的?我没有设置是不是没有用到?TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
要用这个才开吧?我没用.
RE:STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
我在CC3的中断里重置,结果就对.像下面这样,测试是一长一短连续输出波形,高的长,低的时候短.和程序是对得上的.但是在外部中断中重置CC3的比较值就得不到正确的结果.if(TIM_GetITStatus(TIM4, TIM_IT_CC3) != RESET)
{
Temp16 = TIM_GetCapture3(TIM4);
TIM_ClearITPendingBit(TIM4, TIM_IT_CC3);
GPIO_WriteBit(LED, (BitAction)(1 - GPIO_ReadOutputDataBit(LED)));
if(GPIO_ReadOutputDataBit(LED))
{
TIM_SetCompare3(TIM4, Temp16 + 13980);
}
else
{
TIM_SetCompare3(TIM4, Temp16 + 7000);
}
}
RE:STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
能回答一下我的问题么?RE:STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
你说过寄存器的值是改变了还是不行的话真奇怪了 能否吧工程粘上来调试一下RE:STM32的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
TIMx_CCRx寄存器能够在任何时候通过软件进行更新以控制输出波形,条件是未使用预装载寄存器(OCxPE=’0’,否则TIMx_CCRx影子寄存器只能在下一次更新事件发生时被更新)。
页:
[1]