华大单片机HC32L130使用内部RCH时钟源倍频24M外设PCLK到48M

最近使用HC32L130xxx单片机做项目,使用内部RCH做为主时钟源,RCH时钟源最高频率为24M,但是可以通过倍频PLL到48M,时钟源示意图如下图所示。

 配置时钟时注意事项

1、在配置时钟源频率时,不能配置当前正在用的时钟源。比如当前正在使用RCH作为时钟源,那么就不可更改RCH的时钟源,如果要更改,需要将时钟源切换到其他时钟源上,比如切换到RLH。然后设置RCH,时钟源切换完成后,时钟源在切换到RCH。

2、当时钟源HCLK大于24M,此处设置FLASH 读等待周期为1 cycle(前面已经配置,此处无需重复配置),否则当切换时钟源到PLL48M时钟源时就会死机。

初始化程序如下所示。PCLK时钟可以通过Sysctrl_GetPClkFreq()函数读回,用以验证时钟是否设置正确。

void App_RCH24MHzToPll48MHz (void)
{
    stc_sysctrl_pll_cfg_t stcPLLCfg;
    

///<============== 将时钟从RCH4MHz切换至RCH24MHz ==============================    
    ///< RCH时钟不同频率的切换,需要先将时钟切换到RCL,设置好频率后再切回RCH
    Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
    Sysctrl_SysClkSwitch(SysctrlClkRCL);
    
    ///< 加载目标频率的RCH的TRIM值
    Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
    ///< 使能RCH(默认打开,此处可不需要再次打开)
    //Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
    ///< 时钟切换到RCH
    Sysctrl_SysClkSwitch(SysctrlClkRCH);
    ///< 关闭RCL时钟
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
    
	
///< 注意十分重要 当前时钟源HCLK大于24M:此处设置FLASH 读等待周期为1 cycle(前面已经配置,此处无需重复配置)

    Flash_WaitCycle(FlashWaitCycle1);
		
    stcPLLCfg.enInFreq    = SysctrlPllInFreq20_24MHz;   //RCH 24MHz
    stcPLLCfg.enOutFreq   = SysctrlPllOutFreq36_48MHz;  //PLL 输出48MHz
    stcPLLCfg.enPllClkSrc = SysctrlPllRch;              //输入时钟源选择RCH
    stcPLLCfg.enPllMul    = SysctrlPllMul2;             //24MHz x 2 = 48MHz
    Sysctrl_SetPLLFreq(&stcPLLCfg);
    Sysctrl_SetPLLStableTime(SysctrlPllStableCycle16384);
    Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
    
    ///< 时钟切换
    Sysctrl_SysClkSwitch(SysctrlClkPLL);
		
    Sysctrl_GetPClkFreq();						//获取PCLK时钟频率


}

 

debug在线调试读取结果。

 

<think>好的,我需要帮助用户了解HC32L130单片机是否可以通过内部晶振和PLL配置达到48MHz的运行速度,并提供具体的方法教程。首先,我应该查阅相关的数据手册或者用户手册,确认HC32L130内部时钟PLL的配置能力。 根据用户提供的引用内容,引用[1]提到内部高速时钟有4/8/16/22.12/24MHz的选项,PLL时钟范围是8MHz到48MHz。这说明内部晶振的最高频率是24MHz,而PLL可以将时钟倍频到最高48MHz。因此,理论上可以通过将内部高速时钟作为PLL的输入,然后倍频48MHz。 接下来,引用[2]给出了一个配置示例,其中使用外部8MHz晶振并通过PLL倍频9倍得到72MHz(但用户提到的是48MHz)。不过,用户询问的是内部晶振,所以需要调整这个步骤。假设内部高速时钟选择24MHz,那么PLL需要倍频2倍才能得到48MHz。但需要确认PLL是否支持这样的倍频系数,以及内部时钟是否可以达到24MHz。 另外,引用[3]提到在进入低功耗模式时需要关闭外设时钟,这可能与时钟配置后的稳定性有关,但当前问题主要是配置步骤,所以暂时可以忽略这部分。 现在需要具体步骤:首先选择内部高速时钟作为系统时钟,然后配置PLL倍频系数,确保输入频率在PLL的工作范围内。例如,如果内部高速时钟24MHz,通过PLL倍频2倍得到48MHz。但需要检查HC32L130PLL是否允许这样的配置,以及内部时钟是否支持24MHz。 可能的挑战是确认内部高速时钟的最高频率和PLL支持的倍频系数。如果内部高速时钟最高是24MHz,而PLL最大倍频是2倍,那么就能达到48MHz。或者,可能需要更高的倍频系数,但需要确保输入频率乘以倍频系数不超过PLL的最大输出频率48MHz。 最后,需要编写具体的配置代码,参考引用[2]中的步骤,但改用内部时钟和相应的分频器设置。例如,选择内部高速时钟,配置PLL倍频,设置系统时钟PLL,调整APB分频器等。同时,确保代码中的寄存器操作正确,比如使用Sysctrl_SetPeripheralGate函数来管理外设时钟。 总结步骤: 1. 启用内部高速时钟(如24MHz)。 2. 配置PLL内部时钟倍频48MHz(例如,24MHz * 2)。 3. 切换系统时钟PLL输出。 4. 配置APB分频器以设置外设时钟。 5. 验证时钟配置是否正确。 需要确认具体的寄存器配置和函数调用,可能需要参考华大HC32L130的手册,确保步骤正确无误。</think>根据HC32L130单片机时钟系统特性,可以通过内部高速时钟+PLL组合实现48MHz系统时钟,具体配置步骤如下: ### 配置步骤 1. **选择内部高速时钟** - 通过寄存器选择内部高速时钟HSI(默认24MHz)[^1] - 执行时钟切换等待稳定: ```c Sysctrl_SetRCHTrim(SYSCTRL_RCH_24M); // 设置内部24MHz时钟 Sysctrl_ClkSourceEnable(SYSCTRL_CLK_RCH, TRUE); // 启用内部高速时钟 ``` 2. **配置PLL参数** - PLL输入选择内部24MHz时钟 - 配置倍频系数实现48MHz输出: ```c stc_pll_cfg.u8PllDiv = 1; // 输入分频系数 stc_pll_cfg.u8PllMul = 2; // 倍频系数(24MHz*2=48MHz) Sysctrl_SetPLLFreq(&stc_pll_cfg); // 应用PLL配置 ``` 3. **切换系统时钟** - 等待PLL锁定后切换时钟: ```c while(Sysctrl_GetPLLStatus() != 1); // 等待PLL稳定 Sysctrl_SysClkSwitch(SYSCTRL_CLK_PLL); // 切换至PLL时钟 ``` 4. **配置APB分频器** - 设置APB总线时钟分频系数: ```c Sysctrl_SetAPBClkDiv(SYSCTRL_APB_CLK_DIV2); // APB=48MHz/2=24MHz ``` ### 关键验证点 1. 使用示波器测量CLKOUT引脚输出 2. 读取系统时钟状态寄存器: ```c if(Sysctrl_GetClkStatus() & SYSCTRL_CLK_PLL) { // PLL时钟已生效 } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值