GD32F427VET6--8M晶振--时钟配置
1、系列频率
GD32F405xx/ GD32F407xx系列MCU最高主频为168M;
GD32F425xx/ GD32F427xx/ GD32F450xx系列MCU最高主频为200M;
GD32F470xx系列MCU最高主频为240M。
2.GD32F4时钟树
3、时钟配置
3.1、进入gd43f4xx.h,找到外部晶振定义代码,修改为8000000
/* define value of high speed crystal oscillator (HXTAL) in Hz */
#if !defined (HXTAL_VALUE)
//#define HXTAL_VALUE ((uint32_t)25000000)
#define HXTAL_VALUE ((uint32_t)8000000)
#endif /* high speed crystal oscillator value */
3.2、进入system_gd32f4xx.c,设置外部晶振作为系统时钟来源。修改__SYS_OSC_CLK
/* system frequency define */
#define __IRC16M (IRC16M_VALUE) /* internal 16 MHz RC oscillator frequency */
#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */
//#define __SYS_OSC_CLK (__IRC16M) /* main oscillator frequency */
#define __SYS_OSC_CLK (__HXTAL) /* main oscillator frequency */
3.3、进入system_gd32f4xx.c,选择合适的主频,最高支持200MHZ,这里选择8M外部晶振下的200M.
/* select a system clock by uncommenting the following line */
//#define __SYSTEM_CLOCK_IRC16M (uint32_t)(__IRC16M)
//#define __SYSTEM_CLOCK_HXTAL (uint32_t)(__HXTAL)
//#define __SYSTEM_CLOCK_120M_PLL_IRC16M (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_120M_PLL_8M_HXTAL (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_120M_PLL_25M_HXTAL (uint32_t)(120000000)
//#define __SYSTEM_CLOCK_168M_PLL_IRC16M (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_168M_PLL_25M_HXTAL (uint32_t)(168000000)
//#define __SYSTEM_CLOCK_200M_PLL_IRC16M (uint32_t)(200000000)
#define __SYSTEM_CLOCK_200M_PLL_8M_HXTAL (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_200M_PLL_25M_HXTAL (uint32_t)(200000000)
//#define __SYSTEM_CLOCK_240M_PLL_IRC16M (uint32_t)(240000000)
//#define __SYSTEM_CLOCK_240M_PLL_8M_HXTAL (uint32_t)(240000000)
//#define __SYSTEM_CLOCK_240M_PLL_25M_HXTAL (uint32_t)(240000000)
上面的选择之后,编译的就是下面的这段代码:
#elif defined (__SYSTEM_CLOCK_200M_PLL_8M_HXTAL)
uint32_t SystemCoreClock = __SYSTEM_CLOCK_200M_PLL_8M_HXTAL;
static void system_clock_200m_8m_hxtal(void);
上面system_clock_200m_8m_hxtal(void);这个函数就是系统时钟的定义函数。
在该函数中,分别设置了AHB、APB2、APB1时钟,我们查看手册可以看见,这里三个时钟分别为:
1、AHB时钟未分频所以CK_AHB = CK_SYS
2、APB2时钟2分频所以CK_APB2= CK_SYS/2
3、APB1时钟4分频所以CK_APB1= CK_SYS/4
而这里的CK_SYS就是系统时钟,也是CPU的运行时钟。
函数调用:SystemInit (void) --> system_clock_config(void) --> system_clock_200m_8m_hxtal(void)
该函数的具体分析请参考博客:https://blog.csdn.net/weixin_40913720/article/details/118251911
4、配置时钟的几个要点是:
*** 修改使用的外部晶振频率**
*** 将外部晶振作为系统时钟**
*** 取消注释,选择合适的系统时钟频率,取消注释后会有对应的函数进行配置处理,不需要自己操心,详细过程见上面的链接。**