定时器设置完了,中断函数也OK得
触发时间为1毫秒
void
tiM1_UP_TIM16_IRQHandler(void)//此为中断函数
{
if(TIM_GetITStatus(TIM1, TIM_IT_Update))
{
tim[0]++;
}
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx的中断待处理位
}
那么问题来了
tim[0] = 0;
while(tim[ 0 ] < 1000);
按理说程序在这个位置会延迟1秒钟
可是事实这样会是无限循环
当然,解决这个问题的办法是
tim[0] = 0;
while(tim[ 0 ] < 1000)delay_us(1);
在循环里面加一小段函数。这样就能延迟1秒 并且会跳出循环。
我不知道为什么会这样,试过STM8没有这样的问题。
请问这是硬件的原因吗,有哪位能细说一下
一周热门 更多>