打印
[技术问答]

M058,基础库函数的疑问

[复制链接]
1648|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dsoyy|  楼主 | 2014-7-23 01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void SYS_Init(void)
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init System Clock                                                                                       */
/*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable IRC22M clock */
    SYSCLK->PWRCON |= SYSCLK_PWRCON_IRC22M_EN_Msk;

    /* Waiting for IRC22M clock ready */
    SYS_WaitingForClockReady(SYSCLK_CLKSTATUS_IRC22M_STB_Msk);

    /* Switch HCLK clock source to IRC22M */
    SYSCLK->CLKSEL0 = SYSCLK_CLKSEL0_HCLK_IRC22M;

    /* Set PLL to Power-down mode and PLL_STB bit in CLKSTATUS register will be cleared by hardware.*/
    SYSCLK->PLLCON |= SYSCLK_PLLCON_PD_Msk;

    /* Enable external 12MHz XTAL */
    SYSCLK->PWRCON |= SYSCLK_PWRCON_XTL12M_EN_Msk;

    /* Enable PLL and Set PLL frequency */        
    SYSCLK->PLLCON = PLLCON_SETTING;

    /* Waiting for clock ready */
  SYS_WaitingForClockReady(SYSCLK_CLKSTATUS_PLL_STB_Msk | SYSCLK_CLKSTATUS_XTL12M_STB_Msk);

    /* Switch HCLK clock source to PLL, STCLK to HCLK/2 */
    SYSCLK->CLKSEL0 = SYSCLK_CLKSEL0_STCLK_HCLK_DIV2 | SYSCLK_CLKSEL0_HCLK_PLL;

    /* Enable UART clock */        
    SYSCLK->APBCLK = SYSCLK_APBCLK_UART0_EN_Msk;

    /* UART clock source */
    SYSCLK->CLKSEL1 = SYSCLK_CLKSEL1_UART_PLL;

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
    //SystemCoreClockUpdate();
   PllClock        = PLL_CLOCK;            // PLL
   SystemCoreClock = PLL_CLOCK / 1;        // HCLK
   CyclesPerUs     = PLL_CLOCK / 1000000;  // For SYS_SysTickDelay()


/*---------------------------------------------------------------------------------------------------------*/
/* Init I/O Multi-function                                                                                 */
/*---------------------------------------------------------------------------------------------------------*/
    /* Set P3 multi-function pins for UART0 RXD and UART0 TXD */
    SYS->P3_MFP = SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0;

    /* Lock protected registers */
    SYS_LockReg();
}
这是库函数里面最基础的一个,如上面红色字体的函数,因为我用内部的时钟,所以认为对我的工程师多余的,打算删除。
绿色字体的部分,不理解用处在于哪里?是否也可以拿掉呢?



沙发
haolaishi| | 2014-7-23 08:34 | 只看该作者
12MHZ的可以删除,因为你用了内部晶振;PLL不可以删除,比如你实际想要的主频率为50Mhz,内部振荡器才22Mhz,这里就需要 倍频PLL了;这里还有一个问题,内部振荡器是否可以倍频,是个问题,你可以具体查查数据手册

使用特权

评论回复
板凳
gaoyang9992006| | 2014-7-23 09:08 | 只看该作者
/* Switch HCLK clock source to PLL, STCLK to HCLK/2 */
    SYSCLK->CLKSEL0 = SYSCLK_CLKSEL0_STCLK_HCLK_DIV2 | SYSCLK_CLKSEL0_HCLK_PLL;
这一句的意思有两层,第一,切换总线时钟给PLL,外部时钟给总线时钟二分频。:lol
你不需要那个外部时钟,就可以删掉后面的部分。
后面几句,你应该斟酌了,根据你的设计需要,是否要使用那些功能。

使用特权

评论回复
地板
niuyaliang| | 2014-7-23 11:08 | 只看该作者
其实,只开一个主时钟也OK,其他都可以删掉,因为都有默认的时钟了,哈哈

使用特权

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

本版积分规则

144

主题

566

帖子

3

粉丝