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

相关推荐
蓝斯49714 小时前
从.到实现一个Windows上的虚拟hid键盘设备
windows·单片机·计算机外设
熙芯XiChip15 小时前
硬实时与软实时RTOS核心区别
嵌入式硬件
伟大的前程15 小时前
unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机
单片机·嵌入式硬件
小渔村的拉线工15 小时前
1.HPM6E80 解析芯片整体工作原理和存储架构
单片机·嵌入式硬件·mcu·架构·hpm6e80
熙芯XiChip16 小时前
CAN与CANopen的本质区别
单片机
lilihewo16 小时前
Altium Designer 封装库的创建(分享pcb 3D封装库)
嵌入式硬件·51单片机
神罚天下ET17 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
碧海银沙音频科技研究院18 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
Zevalin爱灰灰19 小时前
模拟信号链电路——基于TL431的电压基准电路
单片机·嵌入式硬件
csdn杰哥20 小时前
瑞萨单片机开发教程[二十七] DTC 外部中断触发传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5