观海 发表于 2025-9-8 12:11

linux开发GD32F4单片机-Cmake裸机工程-系统时钟配置

创建系统初始化文件




文件内容如下:

#include "bsp_system_clock.h"

/**
* @brief 系统时钟初始化
*
* @return true 初始化成功
* @return false 初始化失败
*/
bool bsp_system_clock_config(void){
    rcu_deinit();
    rcu_osci_on(RCU_HXTAL);
    if(rcu_osci_stab_wait(RCU_HXTAL) != SUCCESS){
      init_irc16:
      rcu_deinit();
      rcu_osci_on(RCU_IRC16M);
      if(rcu_osci_stab_wait(RCU_IRC16M) != SUCCESS){
            return false;
      }
      rcu_pll_config(RCU_PLLSRC_IRC16M,16,480,2,10);
    }
    else{
      switch (HXTAL_VALUE){
            case (uint32_t)(800000):
                rcu_pll_config(RCU_PLLSRC_HXTAL,8,480,2,10);
                break;
            case (uint32_t)(16000000):
                rcu_pll_config(RCU_PLLSRC_HXTAL,16,480,2,10);
                break;
            case (uint32_t)(25000000):
                rcu_pll_config(RCU_PLLSRC_HXTAL,25,480,2,10);
                break;
            default:
                goto init_irc16;
                break;
      }
    }
    rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1);
    rcu_apb1_clock_config(RCU_APB1_CKAHB_DIV4);
    rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV2);
    rcu_osci_on(RCU_PLL_CK);
    if(rcu_osci_stab_wait(RCU_PLL_CK) != SUCCESS){//等待时钟稳定
      while(1){;}
    }
    rcu_system_clock_source_config(RCU_CKSYSSRC_PLLP);//配置内核时钟源为PLL倍频出来的
    while(0U == (RCU_CFG0 & RCU_SCSS_PLLP)){
      ;
    }
    rcu_clock_freq_get(CK_SYS);
    rcu_clock_freq_get(CK_AHB);
    rcu_clock_freq_get(CK_APB1);
    rcu_clock_freq_get(CK_APB2);
    SysTick_Config(SystemCoreClock/1000);
    NVIC_SetPriority(SysTick_IRQn, 0x00U);
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOH);
    return true;
}


配置文件修改如下:




————————————————
版权声明:本文为CSDN博主「yang_arvin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yang_arvin/article/details/151231495

页: [1]
查看完整版本: linux开发GD32F4单片机-Cmake裸机工程-系统时钟配置