华大HC32F460时钟简介

  最近在学习华大的HC32F460单片机,学习单片机就不得不说说单片机的运行时钟,华大这款单片机的时钟有很多的时钟总线,外设都是挂载在时钟线上运行的,
HC32F460的时钟其实就是片内时钟和片外时钟两种
           片内时钟有三种:
                          1.HRC 片内高速时钟
                          2.MRC 片内中速时钟
                          3.LRC 片内低速时钟
                  片外时钟有两种:
                          1.XTAL   片外高速时钟
                          2.XTAL32 片外低速时钟
HC32F460的简介里说了他的时钟工作频率
如下图所示

但是这个怎么配置呢?在用户手册里的开始就有介绍,但是不清晰,我重新整理了一下

这张表内就把他说的AHB总线和APB总线时钟在内部是怎么分配的介绍清除了,不明白的同学可以查看用户手册
外设挂在哪个总线上清晰了,那怎么配置时钟是多少合适呢?
有两个方法可以参考,第一参考用户手册,第二参考厂家给的例程
先说用户手册看哪里,给大家一个表


大家在配置的时候可以根据这个表来配置时钟频率
刚才也说了有第二种方法来配置,怎么配置呢?
大家看下面这个代码,是我自己根据官方给的例程来进行注释说明的,具体如下

static void SysClkConfig(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;  // 100MHz

    stcSysClkCfg.enExclkDiv = ClkSysclkDiv2;  // 50MHz

    stcSysClkCfg.enPclk0Div = ClkSysclkDiv1;  // 100MHz

    stcSysClkCfg.enPclk1Div = ClkSysclkDiv2;  // 50MHz

    stcSysClkCfg.enPclk2Div = ClkSysclkDiv4;  // 25MHz

    stcSysClkCfg.enPclk3Div = ClkSysclkDiv4;  // 25MHz

    stcSysClkCfg.enPclk4Div = ClkSysclkDiv2;  // 50MHz

    CLK_SysClkConfig(&stcSysClkCfg);//时钟分频

    /* Switch system clock source to MPLL. */

    /* Use Xtal as MPLL source. */

    stcXtalCfg.enMode        = ClkXtalModeOsc;//XTAL模式选择位  0:振荡器模式 1:外部时钟输入模式

    stcXtalCfg.enDrv         = ClkXtalLowDrv;/*XTAL驱动能力选择   00:高驱动能力(建议20~24MHz晶振)

                                                                                                                                                                                                                                                                        01:中驱动能力(建议16~20MHz晶振)

                                                                                                                                                                                                                                                                        10:小驱动能力(建议8~16MHz晶振)

                                                                                                                                                                                                                                                                        11:超小驱动能力(建议4~8MHz晶振)*/

    stcXtalCfg.enFastStartup = Enable;//XTAL超高速驱动允许  0:禁止超高速驱动 1:允许超高速驱动 超高速驱动允许时,XTAL稳定后,无视此位设定,禁止超高速驱动,降低功耗。

    CLK_XtalConfig(&stcXtalCfg);//CMU XTAL  配置寄存器

    CLK_XtalCmd(Enable);//开启CMU XTAL  控制寄存器的XTALSTP 0XTAL振荡器振荡 1:停止振荡

    /* MPLL config. */

    stcMpllCfg.pllmDiv = 1ul;//MPLL输入时钟分频系数

    stcMpllCfg.plln    =50ul;//MPLL倍频系数

    stcMpllCfg.PllpDiv = 4ul;

    stcMpllCfg.PllqDiv = 4ul;

    stcMpllCfg.PllrDiv = 4ul;

    CLK_SetPllSource(ClkPllSrcXTAL);//CMU MPLL  配置 寄存器的时钟源选择

                                                                                                                                                /*MPLL/UPLL输入时钟源选择

                                                                                                                                                        0:选择外部高速振荡器作为MPLL/UPLL的输入时钟

                                                                                                                                                        1:选择内部高速振荡器作为MPLL/UPLL的输入时钟*/

    CLK_MpllConfig(&stcMpllCfg);//CMU MPLL  配置 寄存器 时钟分频配置

    /* flash read wait cycle setting */

    EFM_Unlock();

    EFM_SetLatency(5ul);

    EFM_Lock();

    /* Enable MPLL. */

    CLK_MpllCmd(Enable);//用于开始停止MPLL0MPLL动作开始 1MPLL停止

    /* Wait MPLL ready. */

    while(Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))

    {

        ;

    }

    /* Switch system clock source to MPLL. */

    CLK_SetSysClkSource(CLKSysSrcMPLL);//CMU  系统时钟源切换寄存器

                                                   /* 0 0 0:选择HRC时钟作为系统时钟     内部高速

                                                                                                                                                                        0 0 1:选择MRC时钟作为系统时钟     内部中速

                                                                                                                                                                        0 1 0:选择LRC时钟作为系统时钟     内部低速

                                                                                                                                                                        0 1 1:选择XTAL时钟作为系统时钟    外部高速

                                                                                                                                                                        1 0 0:选择XTAL32时钟作为系统时钟  外部低速

                                                                                                                                                                        1 0 1:选择MPLL作为系统时钟        倍频

                                                                                                                                                                        1 1 0:禁止设定

                                                                                                                                                                        1 1 1:禁止设定*/

}
---------------------
作者:binoo7
链接:https://bbs.21ic.com/icview-3068836-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值