STM32/GD32学习指南-踩坑之(一)外部晶振配置,初始化失败,不起振

6 篇文章 0 订阅
2 篇文章 0 订阅

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◕∀◕)ノ

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

披着假发的程序唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值