400-035-6699
当前位置: 首页 » 技术支持 » 博文资讯 »

晶振更换后如何正确配置电路参数?

GD32官方固件库中,晶振配置通常是预设为8MHz或25MHz。但如果开发者使用其他频率的晶振,该如何调整配置呢?接下来,我将详细说明如何针对不同频率的晶振进行修改,以适应不同的开发需求。
以GD32F303为例,首先我们需要了解官方固件库中晶振和时钟的配置方法。以下是一个示例,展示如何将外部8MHz晶振倍频至120MHz:
```html

官方固件库中的晶振及时钟配置代码如下,改配置代码为使用外部8M晶振倍频到120M时钟。

晶振更换后如何正确配置电路参数?

wKgZomWctE-AEmzFAACI-gWyQRs849.png

```
现在,假设我们要使用16MHz的外部晶振,我们需要对配置进行以下调整:
1. 修改`HXTAL_VALUE`的值。这个宏定义决定了外部晶振的频率。将`HXTAL_VALUE`的值修改为16MHz,如下所示:
```c #if !defined HXTAL_VALUE #ifdef GD32F30X_CL #define HXTAL_VALUE ((uint32_t)25000000) /*!< value of the external oscillator in Hz */ #else #define HXTAL_VALUE ((uint32_t)16000000) /* value of the external oscillator in Hz */ #endif /* HXTAL_VALUE */ #endif /* high speed crystal oscillator value */ ```
2. 接下来,我们需要调整时钟倍频,以达到120MHz的时钟频率。对于16MHz的外部晶振,我们需要配置15倍频。计算公式为:16MHz/2 * 15 = 120MHz。以下是配置代码:
```c /* 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) * 15 = 120 MHz */ RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); RCU_CFG0 |= RCU_PLL_MUL15; ```
通过这两步,我们就可以将16MHz的外部晶振倍频至120MHz。
此外,GD32固件库对于使用内部时钟的配置也相当便捷。只需取消注释相应的宏定义即可。例如,如果想要使用内部8MHz时钟,可以取消以下注释:
```c /* select a system clock by uncommenting the following line */ /* use IRC8M */ //#define __SYSTEM_CLOCK_IRC8M (uint32_t)(__IRC8M) //#define __SYSTEM_CLOCK_48M_PLL_IRC8M (uint32_t)(48000000) //#define __SYSTEM_CLOCK_72M_PLL_IRC8M (uint32_t)(72000000) //#define __SYSTEM_CLOCK_108M_PLL_IRC8M (uint32_t)(108000000) //#define __SYSTEM_CLOCK_120M_PLL_IRC8M (uint32_t)(120000000) ```
在实际开发过程中,选择合适的晶振和时钟配置对于系统的稳定性和性能至关重要。理解并掌握如何根据需要调整晶振配置,可以帮助开发者更好地优化系统性能,满足各种应用场景的需求。

GD32官方提供的固件库中使用的晶振配置一般为8M或25M,如果读者使用其他频率的晶振如何修改配置呢?本文为大家讲解如何修改。

以GD32F303为例,官方固件库中的晶振及时钟配置代码如下,改配置代码为使用外部8M晶振倍频到120M时钟。

wKgZomWctE-AEmzFAACI-gWyQRs849.png

wKgZomWctHOAc9DFAAEbAReqY4w951.png

在此我们举例,若外部晶振使用16M该如何配置,主要修改以下两点:

修改HXTAL_VALUE为16M,如下红色底纹部分。

#if !defined HXTAL_VALUE #ifdef GD32F30X_CL #define HXTAL_VALUE ((uint32_t)25000000) /*!< value of the external oscillator in Hz */ #else #define HXTAL_VALUE ((uint32_t)16000000) /* !< from 4M to 32M *!< value of the external oscillator in Hz*/ #endif /* HXTAL_VALUE */ #endif /* high speed crystal oscillator value */

修改时钟倍频到120M.如下红色底纹部分,配置15倍频,计算公式为16M/2*15=120M.

/* 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) * 15 = 120 MHz */ RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5); RCU_CFG0 |= RCU_PLL_MUL15;

PS:GD固件库中修改使用内部时钟非常方便,只要打开内部时钟的宏定义就可以啦。

/* select a system clock by uncommenting the following line */ /* use IRC8M */ //#define __SYSTEM_CLOCK_IRC8M (uint32_t)(__IRC8M) //#define __SYSTEM_CLOCK_48M_PLL_IRC8M (uint32_t)(48000000) //#define __SYSTEM_CLOCK_72M_PLL_IRC8M (uint32_t)(72000000) //#define __SYSTEM_CLOCK_108M_PLL_IRC8M (uint32_t)(108000000) //#define __SYSTEM_CLOCK_120M_PLL_IRC8M (uint32_t)(120000000)

【限时免费】一键获取网络规划系统模板+传输架构设计+连通性评估方案

相关文章

服务电话:
400-035-6699
企服商城