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 晶振。

相关推荐
FreakStudio2 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘7 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u152109648497 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd8451015007 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼7 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi7 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘7 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展7 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司7 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑7 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习