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

[复制链接]
5562|10
手机看帖
扫描二维码
随时随地手机跟帖
Essex|  楼主 | 2021-5-13 11:11 | 显示全部楼层 |阅读模式
我在配置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
不管怎么短接,至少短接期间都应该不能运行吧。但我这个短接期间是可以正常运行的,这明显就是时钟配置有 ...

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

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


使用特权

评论回复
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 ...

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

使用特权

评论回复
评论
martinhu 2021-5-17 13:54 回复TA
是楼主在测试,不是我。 
TT1000| | 2021-5-17 14:11 | 显示全部楼层
谢谢楼主分享的资料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝