Essex 发表于 2021-5-13 11:11

关于华大HC32F460的时钟配置问题

我在配置HC32F460的时钟,遇到了一个比较鬼畜的问题。我按照如下代码设置了时钟,但奇怪的是,我在硬件上端接晶振引脚,按说芯片会宕机才对,但芯片居然毫无影响,继续运行。想麻烦大家帮我看看,是我哪里设置的不对
void SystemClk_Init(void)
{
    stc_clk_sysclk_cfg_t    stcSysClkCfg;
    stc_clk_xtal_cfg_t      stcXtalCfg;
    stc_clk_mpll_cfg_t      stcMpllCfg;

    MEM_ZERO_STRUCT(stcSysClkCfg);
    MEM_ZERO_STRUCT(stcXtalCfg);
    MEM_ZERO_STRUCT(stcMpllCfg);

    /* Set bus clk div. */
    stcSysClkCfg.enHclkDiv = ClkSysclkDiv1;   // 168MHz
    stcSysClkCfg.enExclkDiv = ClkSysclkDiv2;// 84MHz
    stcSysClkCfg.enPclk0Div = ClkSysclkDiv1;// 168MHz
    stcSysClkCfg.enPclk1Div = ClkSysclkDiv2;// 84MHz
    stcSysClkCfg.enPclk2Div = ClkSysclkDiv4;// 42MHz
    stcSysClkCfg.enPclk3Div = ClkSysclkDiv4;// 42MHz
    stcSysClkCfg.enPclk4Div = ClkSysclkDiv2;// 84MHz
    CLK_SysClkConfig(&stcSysClkCfg);

    /* Switch system clock source to MPLL. */
    /* Use Xtal as MPLL source. */
    stcXtalCfg.enMode = ClkXtalModeOsc;
    stcXtalCfg.enDrv = ClkXtalLowDrv;
    stcXtalCfg.enFastStartup = Disable;
    CLK_XtalConfig(&stcXtalCfg);
    CLK_XtalCmd(Enable);

    /* MPLL config. */
    stcMpllCfg.pllmDiv = 1u;
    stcMpllCfg.plln = 42u;
    stcMpllCfg.PllpDiv = 2u;
    stcMpllCfg.PllqDiv = 2u;
    stcMpllCfg.PllrDiv = 2u;
    CLK_SetPllSource(ClkPllSrcXTAL);
    CLK_MpllConfig(&stcMpllCfg);

    /* flash read wait cycle setting */
    EFM_Unlock();
    EFM_SetLatency(EFM_LATENCY_4);
    EFM_Lock();

    /* Enable MPLL. */
    CLK_MpllCmd(Enable);

    /* Wait MPLL ready. */
    while (Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))
    {
    }

    /* Switch system clock source to MPLL. */
    CLK_SetSysClkSource(ClkSysSrcXTAL);
}


martinhu 发表于 2021-5-13 11:17

“硬件上端接晶振引脚" 是指什么操作

Essex 发表于 2021-5-13 11:23

martinhu 发表于 2021-5-13 11:17
“硬件上端接晶振引脚"是指什么操作

短接晶振的引脚。意思就是人为的让晶振挂掉

martinhu 发表于 2021-5-13 12:02

Essex 发表于 2021-5-13 11:23
短接晶振的引脚。意思就是人为的让晶振挂掉

是一直短接着吗,还是短接了一会儿就释放了?

Essex 发表于 2021-5-13 13:18

martinhu 发表于 2021-5-13 12:02
是一直短接着吗,还是短接了一会儿就释放了?

不管怎么短接,至少短接期间都应该不能运行吧。但我这个短接期间是可以正常运行的,这明显就是时钟配置有问题。所以我想问问我的时钟配置到底是哪里有问题

martinhu 发表于 2021-5-13 14:04

Essex 发表于 2021-5-13 13:18
不管怎么短接,至少短接期间都应该不能运行吧。但我这个短接期间是可以正常运行的,这明显就是时钟配置有 ...


楼主虽然配置了PLL,但是系统时钟用的XTAL

F460具有以下功能,如当XTAL故障的时候,可以自动切换到MRC(即使没设置该功能也会生效)
因为MRC是8M,如果楼主用的XTAL也是8M,那么感觉不到时钟切换,
如果楼主在短接之前使用的PLL 168M做系统时钟,那么短接之后,可以发现系统时钟变慢



zhangjiyun125 发表于 2021-5-13 15:05

这明显就是时钟配置有问题

Essex 发表于 2021-5-14 13:48

martinhu 发表于 2021-5-13 14:04
楼主虽然配置了PLL,但是系统时钟用的XTAL

F460具有以下功能,如当XTAL故障的时候,可以自动切换到MRC ...

涨姿势了。感谢答疑!

HuangHongLun 发表于 2021-5-15 09:40

martinhu 发表于 2021-5-13 14:04
楼主虽然配置了PLL,但是系统时钟用的XTAL

F460具有以下功能,如当XTAL故障的时候,可以自动切换到MRC ...

这个自动进行切换的功能确实相当的不错的,不过直接短接测试,这样测试什么呢?

TT1000 发表于 2021-5-17 14:11

谢谢楼主分享的资料
页: [1]
查看完整版本: 关于华大HC32F460的时钟配置问题