GD32L235 更换外部晶振(8M → 16M)导致 MCU 无法启动的原因分析与解决方法

一、外部晶振与 MCU 的启动关系

  • 外部晶振不会在板子上电后自动起振,需要 MCU 内部软件配置后才能起振。

  • MCU 上电后默认使用内部晶振(IRC) 运行,待 MCU 正常运行后,再通过软件配置切换到外部晶振(HXTAL)。


二、晶振由 8M 更换为 16M 后 MCU 无法运行的原因

  • 当前使用的 Bootloader 程序是基于外部 8M 晶振配置 的,无法适配 16M 晶振。

  • 解决方法:

    1. 修改 Bootloader 程序,使其支持 16M 晶振;

    2. 取消 Bootloader,直接运行应用程序。

以下重点说明 取消 Bootloader 后,使能 16M 晶振配置的方法。


三、取消 Bootloader,使 16M 外部晶振配置生效的步骤

✅(1)修改 HXTAL 频率值
  • 文件:gd32l23x.h

  • 将高速晶体振荡器(HXTAL)的值修改为与外部晶振一致:

c

复制代码
#define HXTAL_VALUE  (16000000UL)   /* 16 MHz */

✅(2)取消 Bootloader 地址偏移
  • 文件:system_gd32l23x.c

  • 将向量表偏移地址从 Bootloader 的 0x00003000U 改为 0x00000000U

c

复制代码
#define VECT_TAB_OFFSET  (uint32_t)0x00000000U

✅(3)选择时钟源为外部高速晶振(HXTAL)
  • 文件:system_gd32l23x.c

  • 使用 HXTAL + PLL 获得 64MHz 系统时钟:

c

复制代码
//表示使用高速外部晶振(HXTAL)+ PLL 得到 64 MHz 系统时钟
#define __SYSTEM_CLOCK_64M_PLL_HXTAL         (uint32_t)(64000000) 

// // 表示使用内部16MHz RC振荡器(IRC16M)+ PLL 得到 64 MHz 系统时钟  
// #define __SYSTEM_CLOCK_64M_PLL_IRC16M      (uint32_t)(64000000)  

✅(4)配置 PLL 倍频系数
  • 文件:system_gd32l23x.c

  • PLL 输出频率 = PLL 输入频率 × 倍频系数

  • 16M 外部晶振,目标主频 64MHz → 倍频系数为 4:

c

复制代码
RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL4);   // 16MHz × 4 = 64MHz

✅(5)修改链接脚本(Linker Script)中的 Flash 配置
  • 文件:gd32l235x_flash.ld

  • 取消 Bootloader 后,应用程序直接从 Flash 起始地址开始,Flash 全部可用:

项目 有 Bootloader 无 Bootloader
起始地址(ORIGIN) 0x08003000 0x08000000
大小(LENGTH) 116K 128K
说明 Bootloader 占用 12K(0x3000) 全部 128K 可用

c

复制代码
/* 修改后示例 */
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K

四、总结

更换外部晶振后,必须确保 HXTAL 频率值、PLL 倍频系数、系统时钟宏定义、向量表偏移地址、Flash 起始地址 等配置与硬件一致。取消 Bootloader 后,MCU 可完全从 0x08000000 开始运行,使用全部 128K Flash,并正常起振 16M 外部晶振。

如果需要保留 Bootloader,则需同步修改 Bootloader 中的晶振与 PLL 配置,使其支持 16M 晶振。

相关推荐
Hall_IC1 小时前
STM32F407VGT6产线急需?粤科源兴现货库存随时调拨,保障交期不延误
stm32·单片机·嵌入式硬件
嵌入式ZYXC1 小时前
第8章:PCB Layout基础与实物打样——把你的设计变成一块真正的板子
stm32·单片机·嵌入式硬件·物联网
zlinear数据采集卡1 小时前
模拟输入限流保护电路深度解析:从理论原理到ZLinear采集卡的实战设计
c语言·单片机·嵌入式硬件·fpga开发·自动化
踏着七彩祥云的小丑1 小时前
嵌入式测试学习第 27 天:网络基础:IP、子网掩码、TCP/UDP基础
单片机·嵌入式硬件
三佛科技-134163842123 小时前
PL3380 (PL338X系列)输出5V100MA非隔离AC-DC降压恒压输出芯片典型应用电路 与LP2601对比
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
DS小龙哥3 小时前
基于STM32设计的物联网智能插座
stm32·嵌入式硬件·物联网
全球通史10 小时前
Keil 配置 MSPM0G3507 开发环境避坑:SysConfig、msp.h 和 driverlib.a 报错完整解决记录
stm32·单片机·嵌入式硬件
secondyoung12 小时前
Cortex-R52学习:MPU内存保护机制
arm开发·单片机·学习·arm·mpu
iCxhust13 小时前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机