GD32F303修改外部25M晶振

背景:
  • 由于项目为了降成本将stm32f407平台换为gd32f303平台,硬件设计没有按照官方参考的8M外部晶振设计,而是采用了25M晶振,因此需要在官方库基础上修改晶振频率,使系统达到更高的主频。
  • 本文将系统主频配置为100Mhz,根据系统时钟树可知25M晶振经过1或者2分频后在倍频2~63倍不能得到120M
实验环境:
  • 主芯片:GD32F303VET6
  • 库版本:GD32F30x_Firmware_Library_V2.1.3
  • 编译环境:keil5
修改方法:
1.修改晶振频率宏定义 HXTAL_VALUE
  • 文件 gd32f30x.h
/* define value of high speed crystal oscillator (HXTAL) in Hz */
#if !defined  HXTAL_VALUE
#ifdef GD32F30X_CL
#define HXTAL_VALUE    ((uint32_t)25000000) /*!< value of the external oscillator in Hz */
#else
//修改这里的  8M 为 25M
//#define HXTAL_VALUE    ((uint32_t)8000000) /* !< from 4M to 32M *!< value of the external oscillator in Hz*/
#define HXTAL_VALUE    ((uint32_t)25000000) /* !< from 4M to 32M *!< value of the external oscillator in Hz*/
#endif /* HXTAL_VALUE */
#endif /* high speed crystal oscillator value */

PS: 仅仅修改此处,系统会运行在25Mhz频率下

2.修改系统主频选择
  • 文件 system_gd32f30x.c
    • 默认选择 __SYSTEM_CLOCK_HXTAL是打开的,这里选择所需的主频,我选择120M,实际是配置不成120M的
/* use HXTAL(XD series CK_HXTAL = 8M, CL series CK_HXTAL = 25M) */
//#define __SYSTEM_CLOCK_HXTAL                    (uint32_t)(__HXTAL)
//#define __SYSTEM_CLOCK_48M_PLL_HXTAL            (uint32_t)(48000000)
//#define __SYSTEM_CLOCK_72M_PLL_HXTAL            (uint32_t)(72000000)
//#define __SYSTEM_CLOCK_108M_PLL_HXTAL           (uint32_t)(108000000)
#define __SYSTEM_CLOCK_120M_PLL_HXTAL           (uint32_t)(120000000)
3.修改时钟配置函数中PLL倍频参数
  • 文件 system_gd32f30x.c
    • 找到步骤2中选择的时钟频率配置函数 static void system_clock_120m_hxtal(void)
#if (defined(GD32F30X_HD) || defined(GD32F30X_XD))
    /* select HXTAL/2 as clock source */
    RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0);
    RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_CFG0_PREDV0);

    /* CK_PLL = (CK_HXTAL/2) * 30 = 120 MHz */
    RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5);
    //将RCU_PLL_MUL30改为RCU_PLL_MUL8 
    //CK_PLL = (25/2) * 8 = 100 MHz
    //RCU_CFG0 |= RCU_PLL_MUL30;
    RCU_CFG0 |= RCU_PLL_MUL8;
    
#elif defined(GD32F30X_CL)

PS: 根据系统时钟树可知,25M晶振不能配置出120M主频,因此此处选择了100M

实验结果:
  • 获取系统主频
获取时钟频率
/*!
    \brief      get the system clock, bus and peripheral clock frequency
    \param[in]  clock: the clock frequency which to get
                only one parameter can be selected which is shown as below:
    \arg        CK_SYS: system clock frequency
    \arg        CK_AHB: AHB clock frequency
    \arg        CK_APB1: APB1 clock frequency
    \arg        CK_APB2: APB2 clock frequency
    \param[out] none
    \retval     clock frequency of system, AHB, APB1, APB2
*/
uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock)
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路人 假

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值