[技术问答] 关于M031的设计使用EXT12M晶振的疑问

[复制链接]
670|5
 楼主| 東南博士 发表于 2021-5-25 08:02 | 显示全部楼层 |阅读模式
关于M031的设计使用EXT12M晶振的疑问

 楼主| 東南博士 发表于 2021-5-25 08:03 | 显示全部楼层
void SYS_Init(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

//    /* Enable HIRC clock (Internal RC 48MHz) */
//    CLK_EnableXtalRC(CLK_PWRCTL_LIRCEN_Msk);

//    /* Wait for HIRC clock ready */
//    CLK_WaitClockReady(CLK_STATUS_LIRCSTB_Msk);

        CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

按道理来说,以上操作流程就可以实现12MHZ了吧?

但是为什么打印出的是48MHZ?
 楼主| 東南博士 发表于 2021-5-25 10:36 | 显示全部楼层
基本上已经搞定了。
发现存在的一个问题是:启动似乎比较慢一些。
 楼主| 東南博士 发表于 2021-5-25 10:36 | 显示全部楼层
void SYS_Init(void)
{
    /* Enable clock source */
    CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

    /* Waiting for clock source ready */
    CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

    /* Disable PLL first to avoid unstable when setting PLL */
    CLK_DisablePLL();

    /* Set PLL frequency */
    CLK->PLLCTL = (CLK->PLLCTL & ~(0x000FFFFFUL)) | 0x0000C25EUL;

    /* Waiting for PLL ready */
    CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);

    /* If the defines do not exist in your project, please refer to the related clk.h in the Header folder appended to the tool package. */
    /* Set HCLK clock */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL, CLK_CLKDIV0_HCLK(1));

    /* Set PCLK-related clock */
    CLK->PCLKDIV = (CLK_PCLKDIV_APB0DIV_DIV1 | CLK_PCLKDIV_APB1DIV_DIV1);


    /* Enable IP clock */
    CLK_EnableModuleClock(PWM1_MODULE);
    CLK_EnableModuleClock(TMR0_MODULE);
    CLK_EnableModuleClock(TMR1_MODULE);
    CLK_EnableModuleClock(TMR2_MODULE);
    CLK_EnableModuleClock(TMR3_MODULE);
    CLK_EnableModuleClock(UART0_MODULE);
    CLK_EnableModuleClock(UART1_MODULE);
    CLK_EnableModuleClock(UART2_MODULE);

    /* Set IP clock */
    CLK_SetModuleClock(PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, MODULE_NoMsk);
    CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_PCLK0, MODULE_NoMsk);
    CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1SEL_PCLK0, MODULE_NoMsk);
    CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL1_TMR2SEL_PCLK1, MODULE_NoMsk);
    CLK_SetModuleClock(TMR3_MODULE, CLK_CLKSEL1_TMR3SEL_PCLK1, MODULE_NoMsk);
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_PCLK0, CLK_CLKDIV0_UART0(1));
    CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART1SEL_PCLK1, CLK_CLKDIV0_UART1(1));
    CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL3_UART2SEL_PCLK0, CLK_CLKDIV4_UART2(1));

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
    SystemCoreClockUpdate();
 楼主| 東南博士 发表于 2021-5-25 10:44 | 显示全部楼层
不知道这样的写法有没有问题。。。
 楼主| 東南博士 发表于 2021-5-25 10:51 | 显示全部楼层
对这里的测试,貌似始终有问题。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

385

主题

6103

帖子

35

粉丝
快速回复 在线客服 返回列表 返回顶部