打印
[AT32F421]

F425 system_core_clock数值进入main函数自动跳到8M

[复制链接]
691|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvben5d|  楼主 | 2022-7-30 15:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lvben5d 于 2022-7-30 15:38 编辑

由于使用了外部8M晶振,并且倍频6倍到 48MHZ, 跟踪过去看,都OK,(当硬件烧录官网例程得时候是96000000,进入main后 全局变量system_core_clock = 96000 000 没问题)。 而我的代码,进入main函数 48000 000 数值就突然变为8000 000。 仿真看不出更改频率得函数。如果我把 system_clock_config();  放到main函数跳转后 最开始的地方,倍频数值就是48000 000 没有被修改。
查看代码,发现  system_clock_config();   放在 SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;  之前  。 以前GD的库就是放这的,现在我擅自修改放着,就不对了。


1659166624010.png (81.51 KB )

1659166624010.png

使用特权

评论回复
沙发
sheltonyu| | 2022-8-1 10:29 | 只看该作者
本帖最后由 sheltonyu 于 2022-8-1 10:50 编辑

你好,原因如下:
(1)keil环境下全局变量system_core_clock被改为8000000的原因是由于在跳转__main后且在进入main函数之前会进行分散加载,其主要内容是初始化内存初始化c库等...,这部分代码是由编译器自行嵌入的。因为system_core_clock变量的初始化值为8000000,你将系统配置的代码移到了跳转__main之前,系统时钟配置流程会自动计算当前频率值赋到system_core_clock变量,但是在进入分散加载流程后,还是会将它初始化为初始值,所以在进入main函数前会被修改为8000000。
(2)gd的可以是因为gd的代码流程直接由宏定义对应了系统时钟的初始值,进入main函数后也是被初始化为对应的宏定义值,没有自动计算的流程。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

746

帖子

12

粉丝