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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版