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

查看: 1734|回复: 9

stm32f407学习求助

[复制链接]

4

主题

35

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-10
发表于 2014-1-17 10:52:06 | 显示全部楼层 |阅读模式
 刚入手了一块stm32f407的板子,发现怎么都跳不出while循环,具体代码如下:
void delay_ms(u32 Count)
{
 
  TimeCount=Count;
       
        while(TimeCount);
       
}
 
此时TimeCount的值已经在中断中递减为0了,但是程序怎么都卡在while中,
改为
while(1)
{
  if(TimeCount==0)
   {
     break;
  }
}
 还是无法跳出,查看变量值也确实是为0了,这是何故~~~难道是单片机有问题吗? 
<
回复

使用道具 举报

22

主题

456

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-20
发表于 2014-1-17 11:06:43 | 显示全部楼层

RE:stm32f407学习求助

while(TimeCount);
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
  if (TimeCount != 0x00)
  {
    TimeCount--;
  }
}
在systick中断里,调用这个函数。

官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
回复 支持 反对

使用道具 举报

4

主题

35

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-10
 楼主| 发表于 2014-1-17 11:16:53 | 显示全部楼层

回复:stm32f407学习求助

回复第 2 楼 于2014-01-17 11:06:43发表:
while(TimeCount);
修改为:while(TimeCount != 0);试试,同时要实现这个函数,
void TimingDelay_Decrement(void)
{
if (TimeCount != 0x00)
{
TimeCount--;
}
}
在systick中断里,调用这个函数。

官网的延时函数一般我们都不用,还是自己定义的延时,软延时和硬延时好用一下。
我的延时就是在systick中调用递减的,改为!=x00试过还是没用
 
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2014-1-17 16:43:43 | 显示全部楼层

RE:stm32f407学习求助

while(1)
{
  if(TimeCount==0)
   {
     return;
   }
}
回复 支持 反对

使用道具 举报

22

主题

456

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-20
发表于 2014-1-17 17:13:04 | 显示全部楼层

回复: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试过还是没用
 

 

官方的例程都不行,那你自己定义一个软件延时试试,看是否是芯片硬件本身的问题呢
回复 支持 反对

使用道具 举报

4

主题

224

回帖

0

蝴蝶豆

初级会员

最后登录
2020-7-4
发表于 2014-1-17 22:37:19 | 显示全部楼层

RE:stm32f407学习求助

看看你编译器的优化等级,是不是编译器把那段代码给优化了, 汇编和你看到的c语言不是一回事。
芯片出错的可能性比较小。
这样写比较好,写成while(1)编译器说不定认为是死循环
while(TimeCount==0)
{
     break;
}
回复 支持 反对

使用道具 举报

2

主题

295

回帖

0

蝴蝶豆

初级会员

最后登录
2018-4-6
发表于 2014-1-17 22:47:39 | 显示全部楼层

RE:stm32f407学习求助

看一下生成的反汇编代码,是被优化掉了么,不是的话在汇编中单步调试看怎么跳转的
回复 支持 反对

使用道具 举报

5

主题

303

回帖

0

蝴蝶豆

金牌会员

最后登录
1970-1-1
发表于 2014-1-18 10:13:13 | 显示全部楼层

回复:stm32f407学习求助

 如果你的主函数就是这点,那么跳出也就跑飞了。是不是断点就在最后括号边上?
回复 支持 反对

使用道具 举报

4

主题

35

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-10
 楼主| 发表于 2014-1-18 11:11:35 | 显示全部楼层

回复:stm32f407学习求助

回复第 6 楼 于2014-01-17 22:37:19发表:
看看你编译器的优化等级,是不是编译器把那段代码给优化了, 汇编和你看到的c语言不是一回事。
芯片出错的可能性比较小。
这样写比较好,写成while(1)编译器说不定认为是死循环
while(TimeCount==0)
{
break;
}
 
问题解决了,是编译器的优化等级问题,把优化等级去掉就好了,十分感谢
 
回复 支持 反对

使用道具 举报

4

主题

35

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-10
 楼主| 发表于 2014-1-18 11:12:28 | 显示全部楼层

回复:stm32f407学习求助

 在此在这里对各位的解答略表谢意!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版