打印

STM32寄存器操作之PLL

[复制链接]
2795|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
supercatinzoo|  楼主 | 2011-8-17 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32寄存器操作之PLL
刚刚入手STM32,看到的大多数例程都是用ST的固件库,很是冗余,彻彻底底地在浪费机器周期,根据个
人爱好,用操作寄存器的方法来开发STM32。
请那些固件库的粉丝们手下留情,作为一个驱动开发者,我要彻彻底底的压榨Chip的资源。
//=========================================================================================
//PLL操作步骤
1.选择要开启的时钟 HSI HSE----------RCC->CR
2.等待选择开启的时钟就绪------------RCC->CR
3.设置时钟SYSCLK、PCLK1、PCLK2------RCC->CFGR
4.设置PLL时钟-----------------------RCC->CFGR
5.使能PLL时钟-----------------------RCC->CR
6.等待PLL时钟使能就绪---------------RCC->CR
7.切换系统时钟为PLL时钟-------------RCC->CFGR
8.等待系统时钟切换就绪--------------RCC->CFGR
//=========================================================================================
//参考代码
void PLLSET(void)
{
    //PLL初始化,设置系统时钟为72MHz
    //开启HSE振荡器
    RCC->CR |= RCC_CR_HSEON;
    //等待外部高速时钟就绪
    while((RCC->CR & RCC_CR_HSERDY) == 0)
    {
        ;
    }   
    //系统时钟不分频
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;  
    //PCLK1不分频
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    //PCLK2 2分频
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
    //PLL configuration: PLLCLK = HSE * 6 = 72 MHz  HSE为12MHz
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);
    //使能PLL
    RCC->CR |= RCC_CR_PLLON;
    //等待PLL就绪
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
        ;
    }
    //选择PLL时钟为系统时钟
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
    //等待系统时钟就绪
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
    {
        ;
    }
    HCLK = 72000000;
    PCLK1 = HCLK;
    PCLK2 = (HCLK >> 1);
    SYSCLK = HCLK;
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

27

帖子

0

粉丝