GD32FFPR时钟初始化失败问题

[复制链接]
3269|11
手机看帖
扫描二维码
随时随地手机跟帖
不完美|  楼主 | 2017-10-8 10:15 | 显示全部楼层 |阅读模式
自己画的一个基于GD32FFPR的电路图,可是电路可以用SWD下载,可是调试看到到了system_gd32f30x.c这里的    /* if fail */
    if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){
        while(1){
        }
就停止了,搞了两天还是不行,望指点一下,谢谢。
lvben5d| | 2017-10-8 19:00 | 显示全部楼层
    /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */
    do{
        timeout++;
        stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB);
    }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout));

如果外部晶振没焊接或起振失败,你的函数就死循环了。 一般STM32和GD32的systerm_gd32f10x.c 启动文件里,都会如我贴图所示,增加软保护。

使用特权

评论回复
不完美|  楼主 | 2017-10-9 13:25 | 显示全部楼层
lvben5d 发表于 2017-10-8 19:00
/* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */
    do ...

你好,我试了一下,可是还是没有用啊。电路板的晶振我测过了,是有起振的,就是不知道为什么按照GD他给的库,systick_config();一开始初始化时钟的函数都挂了,纠结了好几天了请问还有什么调试解决方法吗

使用特权

评论回复
lvben5d| | 2017-10-9 23:25 | 显示全部楼层
可以在硬件仿真的时候,在keil5->view->Register 里点开 你所选系列的IC的时钟相关寄存器,里面标志位可以看下。 如果提前挂掉,你就单步在时钟初始化函数里擦看。
我用的是130和105 130是使用内部HSI , 105用外部8MHZ晶振,库都用了2.0.0版本,systick都正常。 一般需要修改的函数有(以105距离): 你所选的gd32f10x..h文件里, 因为这里有宏定义选 多少时钟主频/* define value of high speed crystal oscillator (HXTAL) in Hz */
#if !defined  HXTAL_VALUE   
#ifdef GD32F10X_CL   
  #define HXTAL_VALUE    (8000000) /*!< value of the external oscillator in Hz */ //CL系列支持
#else
  #define HXTAL_VALUE    ((uint32_t)8000000) /* !< from 4M to 16M *!< value of the external oscillator in Hz*/
#endif /* HXTAL_VALUE */
#endif /* high speed crystal oscillator value */   
元器件的宏定义 放在Project->Options for Target  "你工程的名字"  C/C++   USE_STDPERIPH_DRIVER,GD32F10X_CL,
还有1个函数是system_gd32f10x_cl.s , 我的官网例子PLL倍频和分频是按照外部25MHZ晶振做的,我实际用的是8MHZ, 所以不排除官网的例子目前对于你这个30X型号的倍频和分频计算有问题。

ps:  建议你用Firmware 原版里面的templete 跑下, 不过默认晶振 型号 都要选好。 你的问题往往自己小角度的,别人很难理解你的实际,所以没办法精确定位,这个是大部分人提问的问题。 你的硬件电源跟GND以及Vcap 都要满足官网手册的设计。

使用特权

评论回复
comeon201208| | 2017-10-11 21:17 | 显示全部楼层
估计是外部晶振的问题的

使用特权

评论回复
评论
DomesticSubsti 2022-6-20 15:35 回复TA
如果是软件仿真,这一步挂掉是什么问题 
XY598646744| | 2022-4-22 15:26 | 显示全部楼层
我也遇到一样的问题 ,楼主后面是怎么解决的?

使用特权

评论回复
loony85| | 2022-6-24 11:00 | 显示全部楼层
我用的407也遇到这个问题了,不过够跟你的情况不一样,你是新画的板,我是已经批量的板子,之前用的STM32F446,近期价格涨的是在太离谱,看管脚就试试这个GD32F407,让我意外的是,下载stm的软件竟然直接 运行起来了,我一行代码都没动呀。但是还是担心以后的稳定性问题,所以就花时间移植GD提供的库了,折腾了2天时间,总算不报错了,下载后竟然不运行了。仿真后发现就是卡在这个等待外部晶振稳定的阶段了。

我以为是自己的移植的问题,我又用固件库里面提供的例子,弄了一个点灯的工程,结果一样不能运行,问题还是卡在等待晶振那里。

奇怪呀,既然能运行STM的软件,说明晶振没有问题吧。我就是用的25M外部晶振。但是竟然挂了。

希望有高人指点一二。

支持国产,我在行动。

使用特权

评论回复
JackRenyong139| | 2022-12-14 16:18 | 显示全部楼层
本帖最后由 JackRenyong139 于 2022-12-14 16:49 编辑

我使用GD32F307VCT6,在开发板GD32307C-EVAL中开始还正常,可调式过程中就出现在 :
static void system_clock_108m_hxtal(void)
{
    uint32_t timeout = 0U;
    uint32_t stab_flag = 0U;

    /* enable HXTAL */
    RCU_CTL |= RCU_CTL_HXTALEN;

    /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */
    do{
        timeout++;
        stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB);
    }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout));

    /* if fail */
    if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){
        while(1){
        }
    }
死循环。硬件测试状态如下:
1. 经测试外部25M晶振没有起振; (其他STM32系列芯片HXTAL的引脚内阻都是1M-3M,出故障的GD32F307VCT6内阻只有8.5欧姆)。
2. 下载器能识别GD32F307芯片,擦除、写入都没问题。
3. 更换25M晶振,晶振一样未起振;拆卸下的25M晶振在其它板卡上能正常起振。
4. 测试GD32F307芯片内部晶振又是正常的;
5. RCU_CTL寄存器中HXTALEN位置位(写入1)能正常写入; RCU_CTL寄存器的HXTALSTB位读取数据不是0.
6. 各位大神分析一下啥情况?

使用特权

评论回复
MessageRing| | 2022-12-20 18:02 | 显示全部楼层
是不是晶振有问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝