关于stm32单步执行正常,全速运行结果不正确(时钟配置不正确)的问题

博客讨论了STM32单步执行正常但全速运行结果不正确的问题,主要是时钟配置出错,如延时不正常、装载值与实际值不符。查找网上办法无果后,将system_stm32f1xx.c文件中的SystemCoreClock初值修改,解决了时钟配置问题,使延时准确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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装载值也对了,延时也准了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值