stm32程序在一个位置无限循环

2019-07-14 13:52发布

定时器设置完了,中断函数也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没有这样的问题。
请问这是硬件的原因吗,有哪位能细说一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
蒋jiang
1楼-- · 2019-07-14 23:23
zsl1220548 发表于 2019-3-5 17:04
跟硬件一点关系都没有,首先看你定义的  tim[0]是什么类型的,如果  tim[0]&amp;gt;1000又是在程序哪儿清0的昵,最好仿真看  tim[0]的值的变化 才能找到原因。

u32类型,清零是在while语句的上一句就清零,虽然说我已经知道是什么原因了,不过还是的发出来供大家参考一下
Jaionm
2楼-- · 2019-07-15 02:52
没看明白是什么意思
云淡风轻丶
3楼-- · 2019-07-15 05:32
蒋jiang 发表于 2019-3-5 18:08
u32类型,清零是在while语句的上一句就清零,虽然说我已经知道是什么原因了,不过还是的发出来供大家参考一下

是什么原因啊
冬冬5241
4楼-- · 2019-07-15 08:02
 精彩回答 2  元偷偷看……
zerocq
5楼-- · 2019-07-15 11:43
第一,楼主问题不完整。第二,绝对是软件问题
TOPCB
6楼-- · 2019-07-15 17:07
zerocq 发表于 2019-3-5 19:09
第一,楼主问题不完整。第二,绝对是软件问题

这不是软件问题,是设计人员程序书写的问题。

一周热门 更多>