dd5yit 发表于 2022-11-17 14:41

HC32f460启动过程和时钟分析

软件环境

    系统:win10
    sdk版本:hc32f460_ddl_Rev2.0.0
    数据手册版本:HC32F460系列用户手册 Rev1.21.pdf
    ide:keil5
    开发板:官方评估板(EVB-HC32F460)
    时间:2021.7.1

1. 启动过程
1.1 第一步:读取地址0x400上的内容
数据手册中写道如下:


dd5yit 发表于 2022-11-17 14:42

我们要注意两个地方:

    复位解除后执行,这就说明,这个读flash的0x400地址是要优于程序的,也就是要在程序启动前执行。

    由硬件电路读取,这就说明,这个读取的位置无法人为控制,就是0x400,我们只能在程序下载的时候将信息写道0x400开始的位置。

dd5yit 发表于 2022-11-17 14:42

这个0x400配置了很有用的东西,其中就有看门狗,其实stm32的看门狗一直有一个缺陷,那就是若在芯片启动到main函数执行这个时间发生了跑飞,那么程序就没办法重启,就死机了,而hc32避免了这个问题,可以在复位解除的时候直接配上看门狗,提高了系统的稳定性。至于其他功能,请自行查阅用户手册。

dd5yit 发表于 2022-11-17 14:44

复位和系统时钟配置

这段代码在汇编中执行,也就是.s文件,这个与传统cortex-m的芯片一样,都是执行reset_handler,配置系统时钟systeninit,在执行__main,最后跳到用户函数main,因为和传统stm32的一样,这个不展开细讨论。

dd5yit 发表于 2022-11-17 14:45

要注意这个配置系统时钟systeninit往往使用的是芯片内部的高速时钟,这个配置系统时钟函数由sdk提供,不建议直接在这一步修改为外部时钟(不要随意修改sdk的东西),所以等到执行用户程序的时候需要重新配置到外部高速时钟。

dd5yit 发表于 2022-11-17 14:47

同时要注意在执行配置系统时钟systeninit函数,以及之前这段时间,由于没有时钟配置,所以使用的是内部高速时钟直连的方式驱动的,所以那段程序执行是很慢的。

tpgf 发表于 2022-12-6 15:40

在系统刚开始启动的时候是使用的默认的时钟配置吗

qcliu 发表于 2022-12-6 15:57

dd5yit 发表于 2022-11-17 14:42
我们要注意两个地方:

    复位解除后执行,这就说明,这个读flash的0x400地址是要优于程序的,也就是要在 ...

整个这个流程是固定的妈 不可以由用户进行更改吧

drer 发表于 2022-12-6 16:06

dd5yit 发表于 2022-11-17 14:47
同时要注意在执行配置系统时钟systeninit函数,以及之前这段时间,由于没有时钟配置,所以使用的是内部高速 ...

一般情况下 启动时间大概是多长呢

coshi 发表于 2022-12-6 16:36

HC32F460的时钟其实就是片内时钟和片外时钟两种
         片内时钟有三种:
                        1.HRC 片内高速时钟
                        2.MRC 片内中速时钟
                        3.LRC 片内低速时钟
                  片外时钟有两种:
                        1.XTAL   片外高速时钟
                        2.XTAL32 片外低速时钟

kxsi 发表于 2022-12-6 16:52

外设挂在哪个总线上清晰了,那怎么配置时钟是多少合适呢

wiba 发表于 2022-12-6 17:00

kxsi 发表于 2022-12-6 16:52
外设挂在哪个总线上清晰了,那怎么配置时钟是多少合适呢

有两个方法可以参考,第一参考用户手册,第二参考厂家给的例程
页: [1]
查看完整版本: HC32f460启动过程和时钟分析