stm32一个比较尴尬的地方,为何会这样
定时器设置完了,中断函数也OK得触发时间为1毫秒
void TIM1_UP_TIM16_IRQHandler(void)//此为中断函数
{
if(TIM_GetITStatus(TIM1, TIM_IT_Update))
{
tim++;
}
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx的中断待处理位
}
那么问题来了
tim = 0;
while(tim[ 0 ] < 1000);
按理说程序在这个位置会延迟1秒钟
可是事实这样会是无限循环
当然,解决这个问题的办法是
tim = 0;
while(tim[ 0 ] < 1000)delay_us(1);
在循环里面加一小段函数。这样就能延迟1秒 并且会跳出循环。
我不知道为什么会这样,试过STM8没有这样的问题。
请问这是硬件的原因吗,有哪位能细说一下
这个问题需要注意 目测纯软件问题 跟硬件一点关系都没有,首先看你定义的tim是什么类型的,如果tim>1000又是在程序哪儿清0的昵,最好仿真看tim的值的变化 才能找到原因。 tim是什么类型的,,tim最大值为多少。是不是超出范围了 学习一下,,, 目测是被优化掉了,你把编译选项里改成低级别的优化或不优化试试 zfz0122 发表于 2015-3-13 16:43
tim是什么类型的,,tim最大值为多少。是不是超出范围了
u32类型的 说不定 发表于 2015-3-13 15:19
跟硬件一点关系都没有,首先看你定义的tim是什么类型的,如果tim>1000又是在程序哪儿清0的昵,最 ...
u32类型,清零是在while语句的上一句就清零,虽然说我已经知道是什么原因了,不过还是的发出来供大家参考一下
没看明白是什么意思:L:L:L:L:'(