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,希望大家以后不要踩坑。文章来源:https://www.toymoban.com/news/detail-641257.html
希望大家点赞、收藏、关注哦!!!ヾ(o◕∀◕)ノ文章来源地址https://www.toymoban.com/news/detail-641257.html
到了这里,关于STM32/GD32学习指南-踩坑之(一)外部晶振配置,初始化失败,不起振的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!