STM32/GD32学习指南-解决外部晶振配置初始化失败和不起振问题

GD32使用外部有源晶振和无源晶振的问题,型号为GD32 F450

一、GD32配置使用外部晶振

1.使用外部无源晶振

找到startup_gd32f450_470.s汇编文件,找到SystemInit()函数跳转进去

在底部找到system_clock_config()函数,再次跳转进去

选中宏定义:__SYSTEM_CLOCK_200M_PLL_IRC16M,跳转,如图

将内部时钟定义注释掉,打开相应的外部时钟的定义:__SYSTEM_CLOCK_200M_PLL_25M_HXTAL

根据自己的需求打开对应的系统时钟配置定义,比如我用的是外部25MHZ晶振,系统时钟配置为200MHZ,如果定义中没有自己想要的时钟转换关系,则需要自己编写对应的时钟配置函数,选取合适的分频倍频系数等。

 HXTAL_VALUE宏定义需要进行修改,改为外部时钟实际的频率,我用的25M,即改为25000000

同时__SYS_OSC_CLK宏定义改为:__HXTAL

 跳转到__SYSTEM_CLOCK_200M_PLL_25M_HXTAL对应的系统时钟配置函数:system_clock_200m_25m_hxtal(void)

此函数内即为配置系统各种总线时钟的代码,可根据自己需求修改。

2.使用外部有源晶振

使用有源晶振的话,需要在上述system_clock_200m_25m_hxtal(void)中添加一句话,在RCU_CTL |= RCU_CTL_HXTALEN;前面添加:

rcu_osci_bypass_mode_enable(RCU_HXTAL);

即启用旁路模式-也就是有源外部晶振

注意:无源外部晶振如果添加这句话,会一直卡死在该函数里面,导致时钟初始化失败。

二、踩坑过程

        开发过程中,遇到GD32初始化时钟一直卡在system_clock_200m_25m_hxtal(void)函数里面,卡在了RCU_CTL_HXTALSTB标志位的检测。该标志位表示晶振初始化是否稳定,为硬件置位,软件无法操作。刚开始尝试了各种网上的软件办法去解决,都没有用,还修改过硬件一些电路,最后发现是使用的那个型号的GD32片子有问题,其根本不支持外部晶振起振,有源无源都不支持,真的是贼坑,浪费了很多时间,具体型号是GD32 F450 VGH6,希望大家以后不要踩坑。

希望大家点赞、收藏、关注哦!!!ヾ(o◕∀◕)ノ

物联沃分享整理
物联沃-IOTWORD物联网 » STM32/GD32学习指南-解决外部晶振配置初始化失败和不起振问题

发表评论