股票

stm32卡死在delay_ms()函数的问题

有两块板子,一个烧录程序后工作正常,LED在闪烁。另一个烧录后像是不工作的样子,LED灭的。拿示波器观察I2C,发现有高低电平输出。修改代码,在I2C初始化前将LED点亮,灯保持常亮状态。然后一步步定位,发现程序运行时遇到delay_ms()就卡死了。奇怪的是,两个板子烧写一样的程序,一个工作另一个不工作。

上网查了一下,说是延时的时候遇到滴答程序不递减,进入了死循环。但是,看我的延时函数,并没有使用滴答时钟。

 
  1. void delay_us(uint16_t Time)  
  2. {  
  3.     uint8_t i;  
  4.       
  5.     while(Time –) for(i = 0; i < 8; i ++);  
  6. }  
  7.   
  8. void delay_ms(uint16_t Time)  
  9. {  
  10.     while(Time –) delay_us(1000);  
  11. }  

所以上诉方法不成立。不过可以考虑修改我的延时函数了,比较那种看起来延时比较准。

仔细检查了初始化函数,发现有这么一条指令:

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0010000);

这是在线升级的时候用于进行内存重定向的。我现在测试用的是应用程序,起始地址偏移了0x10000。测试的时候,我只把编译环境中的偏移地址改回 0x80000000,忘了改代码中的了。把这句屏蔽掉,再编译烧写,两块板子都能正常工作了。

打赏
原文链接:,转发请注明来源!

发表评论

  • 1 Responses to “stm32卡死在delay_ms()函数的问题”