关于stm32单步执行正常,全速运行结果不正确(时钟配置不正确)的问题
现象,延时不正常,装载值与实际值不符。但是如果在时钟配置的部分在debug的情况下单步执行,那么一切正常,如果是全速运行,时钟配置将出错,本来是选择外部时钟72M,(我手动修改了SYSTICK中断时间,改为了10us,不是默认的1ms)SYSTICK的装载值是0x2CF,但是全速运行后,时钟却是16M,SYSTICK装载值也变成了0x9F。
查找了很多网上的办法也没有解决。
在system_stm32f1xx.c的文件中有这样一个变量uint32_t SystemCoreClock = 16000000;把这个变量改为uint32_t SystemCoreClock = 72000000;这时候时钟配置就不会出问题了。很奇怪,这个变量其实是在后面配置的时候会自动更新的,会被HAL_RCC_ClockConfig()的时候更新掉,在HAL_RCC_ClockConfig函数中有这样一行代码:
SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
但是的的确确我把这个初值改了之后再全速运行时钟配置寄存器的值也都正常了,SYSTICK装载值也对了,延时也准了。