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、配置时钟的几个要点是:

*** 修改使用的外部晶振频率**
*** 将外部晶振作为系统时钟**
*** 取消注释,选择合适的系统时钟频率,取消注释后会有对应的函数进行配置处理,不需要自己操心,详细过程见上面的链接。**

posted @ 2023-03-02 12:02  xMofang  阅读(1460)  评论(0编辑  收藏  举报