打印
[技术问答]

关于M031的设计使用EXT12M晶振的疑问

[复制链接]
378|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();

使用特权

评论回复
5
東南博士|  楼主 | 2021-5-25 10:44 | 只看该作者
不知道这样的写法有没有问题。。。

使用特权

评论回复
6
東南博士|  楼主 | 2021-5-25 10:51 | 只看该作者
对这里的测试,貌似始终有问题。。。

使用特权

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

本版积分规则

367

主题

6048

帖子

34

粉丝