void TIM2_INIT(void)
{
TIM2_PSCR = 2; /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM2_ARRH = 0x27; /*50ms中断一次*/
TIM2_ARRL = 0x10;
TIM2_IER = 0x01; /*更新中断使能*/
TIM2_CR1 = 0x81; /*使能计数器*/
}
void TIM3_INIT(void)
{
TIM3_PSCR = 1; /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM3_ARRH = 0x27; /*50ms中断一次*/
TIM3_ARRL = 0x10;
TIM3_IER = 0x01; /*更新中断使能*/
TIM3_CR1 = 0x81; /*使能计数器*/
}
void TIM4_INIT(void)
{
TIM4_PSCR = 1; /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM4_ARR = 0x64; /*100us中断一次*/
TIM4_IER = 0x01; /*更新中断使能*/
TIM4_CR1 = 0x81; /*使能计数器*/
@far @interrupt void TIM2_Interrupt (void)
{
tm2++;
TIM2_SR1 = 0x00;
return;
}
@far @interrupt void TIM3_Interrupt (void)
{
tm3++;
TIM3_SR1 = 0x00;
return;
}
@far @interrupt void TIM4_Interrupt (void)
{
tm4++;
TIM4_SR1 = 0x00;
return;
}
上面是我的定时器初始化和中断函数。TIM4每100us中断一次,TIM3是10ms中断一次,TIM4是20ms中断一次。结果每次都是TIM2先中断,此时tm4才49,然后马上进入TIM3中断,此时tm4还是49。按F5下一次还是进入TIM3中断,此时tm4就是149了。现在就是有问题了啊。这定时器TIM2、TIM3的第一次中断总是预定值的一半,后面再进中断的时候就正常了,这是怎么回事啊?有人说是预装载开了没,我现在开了也没用,还是这样。希望知道的人说说看啊,花不了您几分钟的。
} |