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的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?
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的定时器,在改变了它的比较寄存器后,比较中断是立即发生还是要等下一次才发生?