例程版本:hc32f460_ddl_Rev2.1.0
函数名:BSP_CLK_Init(void)
- void BSP_CLK_Init(void)
- {
- stc_clk_sysclk_cfg_t stcSysClkCfg;
- stc_clk_xtal_cfg_t stcXtalCfg;
- stc_clk_mpll_cfg_t stcMpllCfg;
- stc_sram_config_t stcSramConfig;
- MEM_ZERO_STRUCT(stcSysClkCfg);
- MEM_ZERO_STRUCT(stcXtalCfg);
- MEM_ZERO_STRUCT(stcMpllCfg);
- MEM_ZERO_STRUCT(stcSramConfig);
- /* Set bus clk div. */
- stcSysClkCfg.enHclkDiv = ClkSysclkDiv1;
- stcSysClkCfg.enExclkDiv = ClkSysclkDiv2;
- stcSysClkCfg.enPclk0Div = ClkSysclkDiv1;
- stcSysClkCfg.enPclk1Div = ClkSysclkDiv2;
- stcSysClkCfg.enPclk2Div = ClkSysclkDiv4;
- stcSysClkCfg.enPclk3Div = ClkSysclkDiv4;
- stcSysClkCfg.enPclk4Div = ClkSysclkDiv2;
- CLK_SysClkConfig(&stcSysClkCfg);
- /* Config Xtal and Enable Xtal */
- stcXtalCfg.enMode = ClkXtalModeOsc;
- stcXtalCfg.enDrv = ClkXtalLowDrv;
- stcXtalCfg.enFastStartup = Enable;
- CLK_XtalConfig(&stcXtalCfg);
- CLK_XtalCmd(Enable);
- /* sram init include read/write wait cycle setting */
- stcSramConfig.u8SramIdx = Sram12Idx | Sram3Idx | SramHsIdx | SramRetIdx;
- stcSramConfig.enSramRC = SramCycle2;
- stcSramConfig.enSramWC = SramCycle2;
- SRAM_Init(&stcSramConfig);
- /* flash read wait cycle setting */
- EFM_Unlock();
- EFM_SetLatency(EFM_LATENCY_5);
- EFM_Lock();
- /* MPLL config (XTAL / pllmDiv * plln / PllpDiv = 200M). */
- stcMpllCfg.pllmDiv = 1ul;
- stcMpllCfg.plln = 50ul;
- stcMpllCfg.PllpDiv = 2ul;
- stcMpllCfg.PllqDiv = 2ul;
- stcMpllCfg.PllrDiv = 2ul;
- CLK_SetPllSource(ClkPllSrcXTAL);
- CLK_MpllConfig(&stcMpllCfg);
- /* Enable MPLL. */
- CLK_MpllCmd(Enable);
- /* Wait MPLL ready. */
- while(Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))
- {
- ;
- }
- /* Switch driver ability */
- PWC_HS2HP();
- /* Switch system clock source to MPLL. */
- CLK_SetSysClkSource(CLKSysSrcMPLL);
- }
遇到问题过程如下:
1、自己建立空白例程,开始并没有使用这个函数做时钟配置,程序正常跑。
2、各功能移植过程中,参照例程使用此函数初始化,发现程序会自动重启,屏蔽后又正常,此时屏蔽此函数,继续移植。(此时处理的是I2C做oled显示)
3、继续移植过程中,随着各功能增加,有回复此函数,程序正常,无重启。
求助:
对照用户手册,简单了解了时钟,还是不太清楚,这个的启动过程和配置,是否可以参照STM32的过程?或者,是否有专门针对这个时钟的详细说明文档?
|