最近在用到国产单片机开发的一个项目,也是第一次接触小华HC32L071这个单片机,与ST单片的相比是一些细微差别,如时钟,FLASH。官网提供了较多的资料,还是可以轻易上手。
直接说主题吧,问题是单片机能在24MHZ及下频率正常使用,但是只要配置到48MHZ,不论是RCH,还是XTH作为系统源。现象都是不能跑起来,不能调试,连烧录需要更改设置降频1MHZ烧录,时钟代码如下:
static void App_SysClkInit(void)
{
stc_sysctrl_clk_cfg_t stcCfg;
stc_sysctrl_pll_cfg_t stcPLLCfg;
Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE); ///< 使能FLASH模块的外设时钟
Flash_WaitCycle(FlashWaitCycle1);
Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz); ///< PLL使用RCH作为时钟源,因此需要先设置RCH
stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; ///< RCH 4MHz
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz; ///< PLL 输出48MHz
stcPLLCfg.enPllClkSrc = SysctrlPllRch; ///< 输入时钟源选择RCH
stcPLLCfg.enPllMul = SysctrlPllMul12; ///< 4MHz x 12 = 48MHz
Sysctrl_SetPLLFreq(&stcPLLCfg);
///< 选择PLL作为HCLK时钟源;
stcCfg.enClkSrc = SysctrlClkPLL;
stcCfg.enHClkDiv = SysctrlHclkDiv1;
stcCfg.enPClkDiv = SysctrlPclkDiv1;
Sysctrl_ClkInit(&stcCfg);
}
将代码如下调整,这次可以正常运行,调试。但是主频为24MHZ,HCLK分频值不为0了,也是有问题的。
static void App_SysClkInit(void)
{
stc_sysctrl_pll_cfg_t stcPLLCfg;
stc_sysctrl_clk_cfg_t stcCfg;
stcCfg.enHClkDiv = SysctrlHclkDiv1;
stcCfg.enPClkDiv = SysctrlPclkDiv1;
Sysctrl_ClkInit(&stcCfg);
stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; //RCH 4MHz
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz; //PLL 输出
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //输入时钟源选择RCH
stcPLLCfg.enPllMul = SysctrlPllMul12; //4MHz x 12 = 48MHz
Sysctrl_SetPLLFreq(&stcPLLCfg);
///< 当使用的时钟源HCLK大于24M:设置FLASH 读等待周期为1 cycle(默认值也为1 cycle)
Flash_WaitCycle(FlashWaitCycle1);
///< 使能PLL
Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
///< 时钟切换到PLL
Sysctrl_SysClkSwitch(SysctrlClkPLL);
}