/* 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));
可以在硬件仿真的时候,在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型号的倍频和分频计算有问题。
/* 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));