我们使用一款MCU,首先当然要先熟悉它的时钟树及时钟配置。
N32G030K8L7的时钟树
时钟的初始化,在启动文件 startup_n32g030.s 中可以找到蛛丝马迹。
go to 过去看看函数体内是如何进行时钟的配置。可以发现,系统时钟的配置函数在文件system_n32g030.c 中。
可以看到,函数中先是复位时钟配置,然后再调用系统时钟配置函数 SetSysClock();
go to 到 SetSysClock() 的定义,会发现,该函数是根据宏定义 SYSCLK_SRC 和 SYSCLK_FREQ 来进行具体配置的,也就是说,配置系统时钟,我们只需要修改 SYSCLK_SRC 和 SYSCLK_FREQ 这两个宏定义即可,系统时钟就会自动的被配置成我们所设置的时钟频率。
SetSysClock() 的执行流程:
判断时钟来源(不经过PLL) ---> 使能对应时钟源 ---> 等待时钟就绪 ---> 进行 FLASH 相关配置 ---> 设置 AHB 时钟分频系数 ---> 清除 PLL 时钟输出和 PLL 预分频的分频系数 ---> 判断系统时钟来源并设置 ---> 设置PLL相关系数 ---> 使能 PLL ---> 等待PLL就绪 ---> 将 PLLCLK 作为 SYSCLK 的时钟源 ---> 等待配置成功
基本的系统时钟配置在官方提供的库文件下变得很简单了,以上就是系统配置的全过程了。