求助:main()函数循环执行,无法进入while(1)循环

[复制链接]
8739|33
 楼主| fengye5340 发表于 2013-1-7 18:19 | 显示全部楼层 |阅读模式
这两天在调试STM32F3 DISCOVERY,编译环境解决好了以后,遇到了很多奇怪的问题。
这个问题弄了半天也没解决好,还请各位大侠给予指导一下!非常感谢!

int main(void)
{   
      systeminit();
      LED_Init();
      TFT_Init();
      while(1)
      {
      }
}

正常情况下, systeminit();   LED_Init();      TFT_Init(); 顺序执行一次,然后就进入while(1)循环才对,可现在的问题呢是,程序循环执行 systeminit();   LED_Init();      TFT_Init(); 这三个程序,并没有进入 while(1) 循环,刚开始以为软件问题,重新装了软件,换了电脑也不管用。
      用其他的MCU没有出现过这种问题,很奇怪。
airwill 发表于 2013-1-7 23:06 | 显示全部楼层
不知道楼主用的什么编译器?
我用 Keil MDK 4.6 编译, 结果是:

                  main PROC
;;;1      
;;;2      int main(void)
000000  f7fffffe          BL       systeminit
;;;3      {   
;;;4            systeminit();
;;;5            LED_Init();
000004  f7fffffe          BL       LED_Init
;;;6            TFT_Init();
000008  f7fffffe          BL       TFT_Init
                  |L1.12|
;;;7            while(1)
00000c  e7fe              B        |L1.12|
;;;8            {
;;;9            }
;;;10     }
;;;11     
                          ENDP

可以看到 while 循环是个跳转的自身的指令. 不会出现楼主说到的问题
uet_cache 发表于 2013-1-8 09:08 | 显示全部楼层
你的BOOT跳对吗?程序应该在800000H地址开始运行,,
JasonWangFAE 发表于 2013-1-8 09:22 | 显示全部楼层
Please check setting of IAR optimizations .
LDTEST 发表于 2013-1-8 09:31 | 显示全部楼层
本帖最后由 LDTEST 于 2013-1-8 09:35 编辑

TFT_Init()  导致 单片机复位 或者 卡住?
 楼主| fengye5340 发表于 2013-1-8 09:32 | 显示全部楼层
airwill 发表于 2013-1-7 23:06
不知道楼主用的什么编译器?
我用 Keil MDK 4.6 编译, 结果是:

我用的就是KEIL4.6 编译的,以前从来没有出现过这种问题,后来在用的官方的工程文件调试,也出现了这样的情况
 楼主| fengye5340 发表于 2013-1-8 09:34 | 显示全部楼层
LDTEST 发表于 2013-1-8 09:31
楼组的情况可能存在, 如果当  TFT_Init();函数 内导致 单片机 复位的时候就会出现楼组所述现象
楼组重点检 ...

这个函数在F0上跑的没有问题,我没有修改任何地方,可以排除这方面的故障
 楼主| fengye5340 发表于 2013-1-8 09:36 | 显示全部楼层
uet_cache 发表于 2013-1-8 09:08
你的BOOT跳对吗?程序应该在800000H地址开始运行,,

这个在KEIL设置的,没有问题
LDTEST 发表于 2013-1-8 09:36 | 显示全部楼层
函数中间有涉及 F0 和F3  不一致的地方吗?
uet_cache 发表于 2013-1-8 09:40 | 显示全部楼层
boot要硬件先选 对,,,不是软件上面配置个初始地址就行的
 楼主| fengye5340 发表于 2013-1-8 09:42 | 显示全部楼层
LDTEST 发表于 2013-1-8 09:36
函数中间有涉及 F0 和F3  不一致的地方吗?

我现在仅改了端口,其它的都没有动
 楼主| fengye5340 发表于 2013-1-8 09:43 | 显示全部楼层
uet_cache 发表于 2013-1-8 09:40
boot要硬件先选 对,,,不是软件上面配置个初始地址就行的

F303VCT6,板子是默认配置的,我没有修改硬件,默认是从FLASH启动的
LDTEST 发表于 2013-1-8 09:48 | 显示全部楼层
fengye5340 发表于 2013-1-8 09:42
我现在仅改了端口,其它的都没有动

可能有些地方不同,看下参考手册,
没用过F3  不敢断言
就 F0 和F1 F4 以及 F1的 103 和 105  107 systeminit 是不同的
uet_cache 发表于 2013-1-8 09:50 | 显示全部楼层
不行就新建工程,里面写些最简单的C语句试试。。
 楼主| fengye5340 发表于 2013-1-8 10:05 | 显示全部楼层
uet_cache 发表于 2013-1-8 09:50
不行就新建工程,里面写些最简单的C语句试试。。

谢谢楼主,这些都试过了,问题就是那样了,纠结
IJK 发表于 2013-1-8 10:16 | 显示全部楼层
STM32F3 DISCOVERY 记得ST官方有不少例程,支持IAR、Keil 等等编译器。
建议先用官方的例程 跑起来。
看见未来 发表于 2013-1-8 11:36 | 显示全部楼层
int main(void)
main函数定义有返回值,但是程序里没有,
后面加个
return(0);
试试。
 楼主| fengye5340 发表于 2013-1-8 12:47 | 显示全部楼层
IJK 发表于 2013-1-8 10:16
STM32F3 DISCOVERY 记得ST官方有不少例程,支持IAR、Keil 等等编译器。
建议先用官方的例程 跑起来。 ...

今天用官网提供的例程好好测试了一下板子,下载程序后,还是有问题,现在确认是芯片本身的问题了
明月小厨 发表于 2013-1-8 13:00 | 显示全部楼层
TFT_Init();要确定有没有从这个函数出来过?

while(1);要确定有没有执行到这里;
如果上面二个你有确定的判断结果,就不会提上面的问题了;
你肯定没判断清楚.

基本的调试方法楼主不熟悉;多做些项目就熟悉了;兵来将挡,一个一个击破;

明月小厨 发表于 2013-1-8 13:01 | 显示全部楼层
会不会是你的调试器太次了;动不动就掉线;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

455

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部