HC32F460之时钟(晶振)设置

简介

以配置16M晶振为例,具体操作配置如下:

代码如下(修改点1)

void clock_init(void)
{
    stc_clk_xtal_cfg_t   stcXtalCfg; //高速外部震荡器
    stc_clk_mpll_cfg_t   stcMpllCfg; //倍频器/分频器
    stc_clk_sysclk_cfg_t stcSysClkCfg;  //系统时钟 

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

    /* Set bus clk div. */
	stcSysClkCfg.enHclkDiv  = ClkSysclkDiv1;  //200M
    stcSysClkCfg.enExclkDiv = ClkSysclkDiv2;  //100M
    stcSysClkCfg.enPclk0Div = ClkSysclkDiv1;  //200M
    stcSysClkCfg.enPclk1Div = ClkSysclkDiv1;  //200M
    stcSysClkCfg.enPclk2Div = ClkSysclkDiv2;  //100M
    stcSysClkCfg.enPclk3Div = ClkSysclkDiv2;  //100M
    stcSysClkCfg.enPclk4Div = ClkSysclkDiv8;  //50M
    CLK_SysClkConfig(&stcSysClkCfg);
    CLK_SetPeriClkSource(ClkPeriSrcPclk);

    /* Switch system clock source to MPLL. */
    /* Use Xtal as MPLL source. */
    stcXtalCfg.enMode = ClkXtalModeOsc; //配置震荡器
    stcXtalCfg.enDrv = ClkXtalMidDrv; //16M属于中速(或低速)驱动能力
    stcXtalCfg.enFastStartup = Enable;  //使能快速启动
    CLK_XtalConfig(&stcXtalCfg); //配置参数
    CLK_XtalCmd(Enable); //使能震荡器

    /* flash read wait cycle setting */
    EFM_Unlock();
    //配置延迟周期(参考表3),这个参数跟HCLK配置频率有关系 
    EFM_SetLatency(EFM_LATENCY_4);
    EFM_Lock();

    /* Switch driver ability */
    PWC_HS2HP();

	/* MPLL config. */
/* 分频系数  (16M)晶振频率/(2)mdiv*(50)plln = MPLL频率 400MHz  */
	stcMpllCfg.pllmDiv = 2ul;    
    stcMpllCfg.plln =	50ul;		        /* 倍频系数 *100 = 400M */
		
    /* MPLL_P 分频系数  MPLL频率/p =  MPLL_P频率 200MHz */
    stcMpllCfg.PllpDiv = 2ul;	
 
    /* MPLL_Q 分频系数  MPLL频率/q =  MPLL_Q频率 200MHZ */
    stcMpllCfg.PllqDiv = 2ul;	

   /* MPLL_R 分频系数  MPLL频率/r =  MPLL_R频率 200MHZ */
    stcMpllCfg.PllrDiv = 2ul;	

    /* MPLL config. */
/* 分频系数  (8M)晶振频率/(1)mdiv*(50)plln = MPLL频率 400MHz  */
//    stcMpllCfg.pllmDiv = 1u; /* XTAL 8M / 1 */
//    stcMpllCfg.plln = 50u;   /* 8M*50 = 400M */
//    stcMpllCfg.PllpDiv = 2u; /* MLLP = 200M */
//    stcMpllCfg.PllqDiv = 2u; /* MLLQ = 200M */
//    stcMpllCfg.PllrDiv = 2u; /* MLLR = 200M */


    CLK_SetPllSource(ClkPllSrcXTAL); /* 配置时钟源 外部高速振荡器 */
    CLK_MpllConfig(&stcMpllCfg); /* 配置MPLL参数 */

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

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

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

修改点2

在文件system_hc32f46x.h中加入:

#define XTAL_VALUE ((uint32_t)16000000) /*!< External high speed OSC freq. */

#if !defined (XTAL_VALUE)
    #define XTAL_VALUE ((uint32_t)8000000) /*!< External high speed OSC freq. */
#endif

时钟获取验证

void get_all_clock(void)
{
    stc_clk_freq_t   stcClkFreq;
    stc_pll_clk_freq_t stcPllClkFreq;

	MEM_ZERO_STRUCT(stcClkFreq);
    MEM_ZERO_STRUCT(stcPllClkFreq);

	CLK_GetClockFreq(&stcClkFreq);
	CLK_GetPllClockFreq(&stcPllClkFreq);
}
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
hc32f460用户手册是针对华大集成电路公司推出的一款型号为hc32f460的微控制器而编写的文档。该用户手册以PDF格式提供,为用户提供了使用hc32f460微控制器的详细信息和操作指南。 该用户手册中包含了hc32f460微控制器的主要特性和技术规格。用户可以了解到该微控制器的工作频率、存储器容量、引脚定义等基本信息,以便在设计电路时进行合适的选择和配置。 除了基本信息外,用户手册还介绍了hc32f460微控制器的各个模块和外设的功能和使用方法。用户可以了解到该微控制器所支持的通信接口、定时器、中断系统、模拟数字转换器等硬件模块的特性和使用方式。这些模块的详细介绍和使用指南可以帮助用户更好地理解和使用hc32f460微控制器的各种功能。 用户手册还提供了hc32f460微控制器的软件开发工具和编程方法的说明。用户可以了解到该微控制器所支持的开发环境、编程语言和调试工具,并学习如何使用这些工具进行软件开发和调试。 最后,用户手册还包含了一些实例和应用案例,帮助用户更好地理解和应用hc32f460微控制器。这些案例基于常见的应用场景,通过详细的步骤和示意图,展示了如何使用hc32f460微控制器完成相应的功能。 总之,hc32f460用户手册是一份详细的文档,提供了hc32f460微控制器的基本信息、功能介绍、使用方法和应用示例。通过阅读该手册,用户可以全面了解并掌握hc32f460微控制器的使用技巧,从而更好地进行电路设计和应用开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的小熊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值