STM32-仿真调试时的SystemInit
我在开始STM32的仿真调试时,遇到一个问题,就是调试时程序一直停在SystemInit()中的等待晶振中,怎么也出不来。
SystemInit()前面部分的代码,都能走过,就是在执行到最后一个函数时出问题了。
最后一个函数是:SetSysClock();
执行到下面这个循环之后,出不来了:
/* Wait till HSE is ready and if Time out is reached exit */
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
这里,我就有疑问了:
1,我希望的是直接进main函数,那么,这个SystemInit()函数是从哪里来的?
2,为什么会进入死循环?
我全工程搜索“SystemInit”,发现在startup_stm32f0xx.s中有这样的代码:
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
看来,系统是先执行SystemInit,然后才执行main的啊。
接下来是第二个问题,为什么进入死循环?
看看