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

相关推荐
wuyk5554 小时前
防逆向基础:在量产固件中关闭调试接口并设置读保护(RDP)的正确姿势
stm32·单片机·嵌入式硬件·性能优化·重构
zhangrelay7 小时前
单片机原理与接口技术-2026融合版-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
单片机·嵌入式硬件
lhbweilai8 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
艾络迅Acceleronix8 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
涂山苏苏⁠9 小时前
stm32复习总结
stm32·单片机·嵌入式硬件
Zwawa9 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式
苏格拉真没有底9 小时前
ESP32 AI MCP调试器
stm32·单片机·嵌入式硬件
深圳老胡10 小时前
压力检测空吸功能硬件方案全解析:主流压力传感器品牌与实现路径
笔记·单片机·代码规范
创界工坊工作室13 小时前
50-基AT89C51的自动窗帘控制系统的设计
stm32·单片机·嵌入式硬件·51单片机·proteus
xiangw@GZ13 小时前
SD / eMMC / SDIO 总线接口技术对比
单片机·嵌入式硬件