keil MDK从5.36版开始,要参数配置界面中再也不支持修改系统XTL频率了,如图所示:

可以看到XTAL选项是灰色的,不能修改,这样如果进行软件仿真,就会出现时间错误的问题,在网上查找了一下,比如STM32F103,发现提出的解决方法都是去修改system_stm32f10x.c中的时钟定义相关的参数,因为代码中默认是配置为主频72MHz,这个是没错的,但是在相应的函数中,它把PLL设置为了9,所以网上讲,把它设置为6。但是这种修改底层系统代码的方法不可取。

问题就是出在这,按照代码里PLL=9计算,HSE应该是设置为8MHz,这样才是72MHz,然而实际上在进入软件仿真时,我们会发现SYSCLK的时钟频率是108MHz。

 

这样肯定会导致软件仿真时时间不对了,特别是对于调试RTOS来说很不方便。

那么除了网上介绍的修改 system_stm32f10x.c中的定义,还有没有其它方法呢,我在网上搜索并没有找到其它有效的方法。所以自已慢慢摸索,经过分析,发现还是可以直接修改软件仿真的参数来实现的,思路来源于仿真时,我们可以手动输入改变代码中变量的值来观察代码的执行情况,那么也应该可以修改SYSCLK的值。具体修改方法为进入软件仿真界面,位置如下:点击Peripherals后再点击POWER,RESET and Clock Control(PRCC)选项,进入系统时钟查看界面,

在内核时钟寄存器中,我们可以看到时钟频率OSC是12MHz,再根据上面代码中的定义PLL= 9,所以SYSCLK= 9*12 = 108MHz。 

既然知道了时钟变为108MHz的原因了,那就好办了,我们修改OSC频率,将它从12MHz修改为8MHz不就行了吗?现在我们看看1S定时的仿真结果,看SYSCLK是72MHz(查看红圈1处),下面定时时间也是1S了(查看红圈2处)。

 再看看未修改前,即默认SYSCLK参数变成108MHz时,1S定时的实际仿真时间是0.66S左右。

从以上可以确定,修改仿真时的主频时钟成功。 

 

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐