嵌入式学习小组
直播中

徐伟

7年用户 924经验值
私信 关注

求大神给一份新唐MINI51使用内置RC振荡例程

求大神给一份新唐MINI51使用内置RC振荡例程,我 按照官方的例程,程序怎么都跑不起来

官方的例程都是启动内部RC后切换为外部晶振的,把切换外部晶振这个步骤注释掉就可了


回帖(1)

李华

2023-10-21 16:10:10
以下是新唐MINI51使用内置RC振荡的例程:

```
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "Mini51Series.h"

#define PLL_CLOCK   50000000

void CLK_Init(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable HIRC */
    CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

    /* Waiting for HIRC clock ready */
    CLK_SysTickDelay(2000);

    /* Set HCLK clock */
    CLK_SetCoreClock(PLL_CLOCK);

    /* Enable UART clock */
    CLK_EnableModuleClock(UART0_MODULE);

    /* Set UART clock */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0_S_HCLK, CLK_CLKDIV_UART(1));

    /* Lock protected registers */
    SYS_LockReg();
}

int main()
{
    /* Init System, IP clock and multi-function I/Os */
    SYS_Init();

    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART0, 115200);

    /* Enable FMC ISP */
    FMC_Open();

    /* Enable internal RC oscillator */
    CLK->PWRCON |= CLK_PWRCON_IRC22M_EN_Msk;

    /* Waiting for clock ready */
    while(!(CLK->CLKSTATUS & CLK_CLKSTATUS_IRC22M_STB_Msk));

    /* Switch to internal RC */
    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_IRC, CLK_CLKDIV_HCLK(1));

    /* Output message */
    printf("Welcome to use internal RC oscillator testn");

    /* Output core clock rate */
    printf("Core Clock Rate = %d Hzn", SystemCoreClock);

    while(1);
}
```

在该例程中,我们使用了内置22.1184MHz的RC振荡器作为时钟源,并将系统时钟设置为PLL输出频率50MHz。在启用内部RC之后,我们使用了 `CLK_SetHCLK()` 函数将系统时钟切换为内部RC,并输出一条欢迎消息和当前系统时钟频率的消息。

如果仍然无法正常运行程序,请确保您的硬件连接正确并且您的开发板能够正常工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分