打印
[开发工具]

HC32F460系统时钟初始化分析

[复制链接]
903|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nizhenyuchina|  楼主 | 2020-10-9 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*******************************************************************************
* Include files
******************************************************************************/
#include "HC32F46x.h"

/**
*******************************************************************************
** \addtogroup Hc32f46xSystemGroup
******************************************************************************/

/*******************************************************************************
* Global pre-processor symbols/macros ('define')
******************************************************************************/

//@{

/**
******************************************************************************
** System Clock Frequency (Core Clock) Variable according CMSIS
******************************************************************************/
uint32_t SystemCoreClock = MRC_VALUE;

/**
******************************************************************************
** \brief  Setup the microcontroller system. Initialize the System and update
** the SystemCoreClock variable.
**
** \param  None
** \return None
******************************************************************************/
void SystemInit(void)
{
//和内核有关
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 20) | (3UL << 22)); /* set CP10 and CP11 Full Access */
#endif

    SystemCoreClockUpdate();
}
//此函数只是在开始第一次运行的时候 通过时钟源默认的修改了 SystemCoreClock的数值
//SystemCoreClock= MRC_VALUE 8MHZ
void SystemCoreClockUpdate(void)  // Update SystemCoreClock variable
{
    uint8_t tmp = 0u;
    uint32_t plln = 19u, pllp = 1u, pllm = 0u, pllsource = 0u;
    // 复位后默认 CKSM =1  选择MRC时钟作为系统时钟 初始化,系统时钟源选择MRC时钟
    // MPLLP=1 (2分频)MPLLP输出时钟频率=MPLL的VCO频率/MPLLP
    // MPLLQ=1 (2分频)MPLLQ输出时钟频率=MPLL的VCO频率/MPLLQ
    // MPLLR=1 (2分频)MPLLR输出时钟频率=MPLL的VCO频率/MPLLR
    // MPLLN=0x13 (20倍频)MPLL的VCO频率=MPLL的VCO输入频率 * MPLLN
    // PLLSRC=0  选择外部高速振荡器作为MPLL/UPLL的输入时钟
    // MPLLM=0(1分频)MPLL输入时钟分频系数必须在1-12MHZ之间
    tmp = SYSREG->CMU_CKSWR_f.CKSW;
    switch (tmp)
    {
        case 0x00:  /* use internal high speed RC */
            SystemCoreClock = HRC_VALUE;
            break;
        case 0x01:  /* use internal middle speed RC */
            SystemCoreClock = MRC_VALUE;
            break;
        case 0x02:  /* use internal low speed RC */
            SystemCoreClock = LRC_VALUE;
            break;
        case 0x03:  /* use external high speed RC */
            SystemCoreClock = XTAL_VALUE;
            break;
        case 0x04:  /* use external low speed RC */
            SystemCoreClock = XTAL32_VALUE;
            break;
        case 0x05:  /* use MPLL */
            /* PLLCLK = ((pllsrc / pllm) * plln) / pllp */
            pllsource = SYSREG->CMU_PLLCFGR_f.PLLSRC;
            plln = SYSREG->CMU_PLLCFGR_f.MPLLN;
            pllp = SYSREG->CMU_PLLCFGR_f.MPLLP;
            pllm = SYSREG->CMU_PLLCFGR_f.MPLLM;
            /* use exteranl high speed OSC as PLL source */
            if (0ul == pllsource)
            {   //SystemCoreClock = 8000000 /(0+1)*(19+1)/1= 80MHZ
                SystemCoreClock = (XTAL_VALUE) / (pllm + 1ul) * (plln + 1ul) / (pllp + 1ul);
            }
            /* use interanl high RC as PLL source */
            else if (1ul == pllsource)
            {
                SystemCoreClock = (HRC_VALUE) / (pllm + 1ul) * (plln + 1ul) / (pllp + 1ul);
            }
            else
            {
                /* Reserved */
            }
            break;
    }
}

//@} // UsartGroup

/*******************************************************************************
* EOF (not truncated)
******************************************************************************/

使用特权

评论回复
评论
martinhu 2020-10-12 19:51 回复TA
这个严格意义来说不是时钟的初始化,真正用户需要的初始化,是设置系统时钟的主频,包括使用外部或者内部高速时钟,各个PCLK的分频,PLL的倍频的系数等等,在main里面实现的。各个样例里面几乎都有。 
沙发
zeshoufx| | 2020-10-9 15:54 | 只看该作者
谢谢分享【HC32F460系统时钟初始化分析】

使用特权

评论回复
板凳
看别人照片| | 2020-10-10 10:20 | 只看该作者
谢谢分享【HC32F460系统时钟初始化分析】

使用特权

评论回复
地板
edyd| | 2021-1-6 16:09 | 只看该作者
这个根本就是默认内部8MHzRC振荡器。

使用特权

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

本版积分规则

8

主题

28

帖子

1

粉丝