GD32E103C8T6将内部晶体起振方式改为外部8M晶体起振

1.首先查阅芯片的数据手册看是否支持外部晶体起振,GD32E103C8T6我看了是支持的。
2.其次要确保目标板是有外部晶体连接的,没有外置晶体这样操作并没有作用。
3.另外在PCB布线时,晶振电路的走线尽量短且靠近IC,杜绝在晶振两脚走线。

在system_gd32e10x.c文件里将IRC(尾部IRC是内部晶体的意思)注释,放开对应72M HXTAL(尾部HXTAL是外部晶体的意思)的注释,这里我的内部程序已经经过了分频、倍频,所以不能乱选,根据自己需求选择。

/* 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)

/* use HXTAL(CK_HXTAL = 8M) */
//#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)
/* 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)

/* use HXTAL(CK_HXTAL = 8M) */
//#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)

到这里你以为结束了?如果是GD32F130C8T6芯片,在HXTAL_VALUE上鼠标右键 go to def ‘HXTAL_VALUE’,可以找到很关键的几句话

/* system frequency define */
#define __IRC8M           (IRC8M_VALUE)            /* internal 8 MHz RC oscillator frequency */
#define __HXTAL           (HXTAL_VALUE)            /* high speed crystal oscillator frequency */
#define __SYS_OSC_CLK     (__IRC8M)                /* main oscillator frequency */

以下,这几句话决定了外部8M晶振是否起作用。

/* define value of high speed crystal oscillator (HXTAL) in Hz */
#if !defined  (HXTAL_VALUE)
#define HXTAL_VALUE    ((uint32_t)8000000)
#endif /* high speed crystal oscillator value */

我们再看GD32E103C8T6,大概率会报这个;意思是没有定义HXTAL_VALUE;在这里插入图片描述

我们用HXTAL_VALUE全局查找,会在gd32e10x.h这个文件里发现重要的几句话是灰色的,也就是没有起作用;
在这里插入图片描述
接下来,我们做阅读理解:
#if !defined HXTAL_VALUE
如果没有定义HXTAL_VALUE;
#ifdef GD32E103V_EVAL
如果定义了GD32E103V_EVAL ;
#define HXTAL_VALUE ((uint32_t)8000000) /*!< value of the external oscillator in Hz */
#define HXTAL_VALUE_8M HXTAL_VALUE
这两个宏定义就起作用了;
接下来我们看全局预编译,点击魔术棒 -> 选择C\C++
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择以后,可以看到菜单中的Define,如图所示,文本框中输入的预编译的内容中有HXTAL_VALUE,没有GD32E103V_EVAL ,所以 所以啊 友友们发现了吗。
我们就是要改这里,将HXTAL_VALUE删去,加入GD32E103V_EVAL
在这里插入图片描述

重要的几句话就起作用了,编译一下,大功告成!嘿嘿!给同样玩儿GD32系列的友友一个参考。

这里附一个帖子,就是里面帖子的回复那样。
https://bbs.21ic.com/icview-2686562-1-1.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值