你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32f407学习求助
[复制链接]
wellwu
提问时间:2014-1-17 10:52 /
刚入手了一块stm32f407的板子,发现怎么都跳不出while循环,具体代码如下:
void delay_ms(u32 Count)
{
TimeCount=Count;
while(TimeCount);
}
此时TimeCount的值已经在中断中递减为0了,但是程序怎么都卡在while中,
改为
while(1)
{
if(TimeCount==0)
{
break;
}
}
还是无法跳出,查看变量值也确实是为0了,这是何故~~~难道是单片机有问题吗?
赞
0
收藏
0
评论
9
分享
发布时间:2014-1-17 10:52
举报
请先
登录
后回复
9个回答
fengye5340
回答时间:2014-1-17 11:06:43
a0a.1 0b0c
RE:stm32f407学习求助
while(TimeCount);
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
if (TimeCount != 0x00)
{
TimeCount--;
}
}
在systick中断里,调用这个函数。
官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
赞
0
评论
回复
支持
反对
wellwu
回答时间:2014-1-17 11:16:53
a0a.1 0b0c
回复:stm32f407学习求助
回复第 2 楼 于2014-01-17 11:06:43发表:
while(TimeCount);
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
if (TimeCount != 0x00)
{
TimeCount--;
}
}
在systick中断里,调用这个函数。
官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
我的延时就是在systick中调用递减的,改为!=x00试过还是没用
赞
0
评论
回复
支持
反对
废鱼
回答时间:2014-1-17 16:43:43
a0a.1 0b0c
RE:stm32f407学习求助
while(1)
{
if(TimeCount==0)
{
return;
}
}
赞
0
评论
回复
支持
反对
fengye5340
回答时间:2014-1-17 17:13:04
a0a.1 0b0c
回复:stm32f407学习求助
回复第 3 楼 于2014-01-17 11:16:53发表:
回复第 2 楼 于2014-01-17 11:06:43发表:
while(TimeCount);
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
if (TimeCount != 0x00)
{
TimeCount--;
}
}
在systick中断里,调用这个函数。
官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
我的延时就是在systick中调用递减的,改为!=x00试过还是没用
官方的例程都不行,那你自己定义一个软件延时试试,看是否是芯片硬件本身的问题呢
赞
0
评论
回复
支持
反对
wkuang
回答时间:2014-1-17 22:37:19
a0a.1 0b0c
RE:stm32f407学习求助
看看你编译器的优化等级,是不是编译器把那段代码给优化了, 汇编和你看到的c语言不是一回事。
芯片出错的可能性比较小。
这样写比较好,写成while(1)编译器说不定认为是死循环
while(TimeCount==0)
{
break;
}
赞
0
评论
回复
支持
反对
有缘于你
回答时间:2014-1-17 22:47:39
a0a.1 0b0c
RE:stm32f407学习求助
看一下生成的反汇编代码,是被优化掉了么,不是的话在汇编中单步调试看怎么跳转的
赞
0
评论
回复
支持
反对
dzc2001
回答时间:2014-1-18 10:13:13
a0a.1 0b0c
回复:stm32f407学习求助
如果你的主函数就是这点,那么跳出也就跑飞了。是不是断点就在最后括号边上?
赞
0
评论
回复
支持
反对
wellwu
回答时间:2014-1-18 11:11:35
a0a.1 0b0c
回复:stm32f407学习求助
回复第 6 楼 于2014-01-17 22:37:19发表:
看看你编译器的优化等级,是不是编译器把那段代码给优化了, 汇编和你看到的c语言不是一回事。
芯片出错的可能性比较小。
这样写比较好,写成while(1)编译器说不定认为是死循环
while(TimeCount==0)
{
break;
}
问题解决了,是编译器的优化等级问题,把优化等级去掉就好了,十分感谢
赞
0
评论
回复
支持
反对
wellwu
回答时间:2014-1-18 11:12:28
a0a.1 0b0c
回复:stm32f407学习求助
在此在这里对各位的解答略表谢意!
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:stm32f407学习求助
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
if (TimeCount != 0x00)
{
TimeCount--;
}
}
在systick中断里,调用这个函数。
官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
回复:stm32f407学习求助
while(TimeCount);
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
if (TimeCount != 0x00)
{
TimeCount--;
}
}
在systick中断里,调用这个函数。
官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
我的延时就是在systick中调用递减的,改为!=x00试过还是没用
RE:stm32f407学习求助
{
if(TimeCount==0)
{
return;
}
}
回复:stm32f407学习求助
回复第 2 楼 于2014-01-17 11:06:43发表:
while(TimeCount);
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
if (TimeCount != 0x00)
{
TimeCount--;
}
}
在systick中断里,调用这个函数。
官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
我的延时就是在systick中调用递减的,改为!=x00试过还是没用
官方的例程都不行,那你自己定义一个软件延时试试,看是否是芯片硬件本身的问题呢
RE:stm32f407学习求助
芯片出错的可能性比较小。
这样写比较好,写成while(1)编译器说不定认为是死循环
while(TimeCount==0)
{
break;
}
RE:stm32f407学习求助
回复:stm32f407学习求助
回复:stm32f407学习求助
看看你编译器的优化等级,是不是编译器把那段代码给优化了, 汇编和你看到的c语言不是一回事。
芯片出错的可能性比较小。
这样写比较好,写成while(1)编译器说不定认为是死循环
while(TimeCount==0)
{
break;
}
问题解决了,是编译器的优化等级问题,把优化等级去掉就好了,十分感谢
回复:stm32f407学习求助