打印
[STM32L1]

STM32L151 使用内部晶振 HSI,设置系统时钟问题

[复制链接]
7338|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
weiyuliang|  楼主 | 2016-6-30 11:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好!
在使用STM32L151内部HSI作为系统晶振的时候,遇到一个问题,就是系统时钟配置完成之后,读取系统时钟频率一直是16M, 即使设置了倍频还是一样,
用过这个芯片的朋友帮忙看下,是我那里配置出来问题?谢谢大家了

/*********************************************************************************************************
** Function name : HSI_Configuration
** Input Para         :
** Output Para         :
** Created by    : weiyuliang 魏玉良
** Created Date  : 2016年06月30日
** Descriptions         : 设置系统时钟为HSI
**
** -------------------------------------------------------------------------------------------------------
** Modified by   :
** Modified Date :
** Descriptions         :
**
** -------------------------------------------------------------------------------------------------------
**********************************************************************************************************/

void HSI_Configuration(void)
{
        //RCC reset
    RCC_DeInit();
   
    //Enable HSI
    RCC_HSICmd(ENABLE);
   
    //wait HSI
    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);
       
        RCC_HSEConfig(RCC_HSE_OFF);  
        if(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET )
        {
                while(1);
        }
       
        RCC_AdjustHSICalibrationValue(16);
       
    FLASH_PrefetchBufferCmd(ENABLE);
    FLASH_SetLatency(FLASH_Latency_1);
       
        /* Power enable */
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
        /* Select the Voltage Range 1 (1.8 V) */
    PWR->CR = PWR_CR_VOS_1;
       
       
        RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
    while (RCC_GetSYSCLKSource() != 0x04)
        {
        }

    /* 设置AHB时钟=32 MHz */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);

    /* 设置APB1时钟=32 MHz */
    RCC_PCLK1Config(RCC_SYSCLK_Div1);

    /* 设置APB2时钟=32 MHz */
    RCC_PCLK2Config(RCC_SYSCLK_Div1);

        /* 8M*4/2 = 32M */
    RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_4, RCC_PLLDiv_2);
   
    /* Enable PLL */
    RCC_PLLCmd(ENABLE);
       
    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }
       
}



/*********************************************************************************************************
** Function name : get_sys_clock_fre
** Input Para         :
** Output Para         :
** Created by    : weiyuliang 魏玉良
** Created Date  : 2016年06月30日
** Descriptions         : 读取系统时钟频率
**
** -------------------------------------------------------------------------------------------------------
** Modified by   :
** Modified Date :
** Descriptions         :
**
** -------------------------------------------------------------------------------------------------------
**********************************************************************************************************/

void get_sys_clock_fre(void)
{
    RCC_ClocksTypeDef get_rcc_clock;
   
    /* 获取系统时钟 */
    RCC_GetClocksFreq(&get_rcc_clock);

   
    /* 输出 系统时钟频率 */
    printf(" SYSCLK %d\n",    get_rcc_clock.SYSCLK_Frequency);
    printf(" HCLK   %d\n"  ,  get_rcc_clock.HCLK_Frequency);
    printf(" PCLK1  %d\n" ,   get_rcc_clock.PCLK1_Frequency);
    printf(" PCLK2  %d\n" ,   get_rcc_clock.PCLK2_Frequency);
}
沙发
mmuuss586| | 2016-6-30 20:15 | 只看该作者
把相应的时钟配置寄存器值读出来,看有没有写成功

使用特权

评论回复
板凳
weiyuliang|  楼主 | 2016-7-5 09:59 | 只看该作者
mmuuss586 发表于 2016-6-30 20:15
把相应的时钟配置寄存器值读出来,看有没有写成功

好的,多谢

使用特权

评论回复
地板
weiyuliang|  楼主 | 2016-7-5 09:59 | 只看该作者
找到问题了,
有一个参数设置错了
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
    RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
    RTC_InitStructure.RTC_SynchPrediv = 0x00FF;
谢谢各位!

使用特权

评论回复
5
just_2010| | 2020-8-24 16:52 | 只看该作者
最近要用到,谢谢

使用特权

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

本版积分规则

3

主题

97

帖子

0

粉丝