你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32一个比较尴尬的地方,为何会这样

[复制链接]
wsnfly~ 提问时间:2015-3-13 14:50 /
定时器设置完了,中断函数也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没有这样的问题。
请问这是硬件的原因吗,有哪位能细说一下



收藏 评论33 发布时间:2015-3-13 14:50

举报

33个回答
foxglove 回答时间:2015-3-13 14:57:45
这个问题需要注意
Mandelbrot_Set 回答时间:2015-3-13 15:09:22
目测纯软件问题
说不定 回答时间:2015-3-13 15:19:45
跟硬件一点关系都没有,首先看你定义的  tim[0]是什么类型的,如果  tim[0]>1000又是在程序哪儿清0的昵,最好仿真看  tim[0]的值的变化 才能找到原因。
zfz0122 回答时间:2015-3-13 16:43:40
tim[0]是什么类型的,,tim最大值为多少。是不是超出范围了 14.gif
大浪10010 回答时间:2015-3-13 20:11:09
学习一下,,,
dsjsjf 回答时间:2015-3-13 22:16:51
目测是被优化掉了,你把编译选项里改成低级别的优化或不优化试试
wsnfly~ 回答时间:2015-3-13 22:56:27
zfz0122 发表于 2015-3-13 16:43
tim[0]是什么类型的,,tim最大值为多少。是不是超出范围了

u32类型的
wsnfly~ 回答时间:2015-3-13 22:57:57
说不定 发表于 2015-3-13 15:19
跟硬件一点关系都没有,首先看你定义的  tim[0]是什么类型的,如果  tim[0]>1000又是在程序哪儿清0的昵,最 ...

u32类型,清零是在while语句的上一句就清零,虽然说我已经知道是什么原因了,不过还是的发出来供大家参考一下
_ilikerome_ 回答时间:2015-3-14 08:47:58
没看明白是什么意思
1234下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版