STM32F103的系统时钟配置不了72MHZ

2019-08-17 02:09发布

主程序中已经有配置系统时钟了,但配置了也达不到72MHZ,还是8MHZ,这是哪里设置不对吗? void RCC_Configuration()    //配置STM32的时钟 & 打开IO口时钟 {    ErrorStatus HSEStartUpStatus;//定义外部高速晶体启动状态枚举变量    RCC_DeInit();//复位RCC外部设备寄存器到默认值    RCC_HSEConfig(RCC_HSE_ON);//打开外部高速晶振    HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速时钟准备好    if(HSEStartUpStatus==SUCCESS)//外部高速时钟已经准备好    {       FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  //选择FLASH预取指缓存的模,预取指缓存使能    FLASH_SetLatency(FLASH_Latency_2);      //设置FLASH存储器延时时钟周期数  FLASH_Latency_2  2延时周期    RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置AHB(HCLK)时钟=SYSCLK    RCC_PCLK2Config(RCC_HCLK_Div1);//配置APB2(PCLK2)时钟=AHB时钟    RCC_PCLK1Config(RCC_HCLK_Div2);//配置APB1(PCLK1)时钟=AHB 1/2时钟    RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//配置PLL时钟=外部高速晶体时钟*9    RCC_PLLCmd(ENABLE);//使能PLL时钟    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//等待PLL时钟就绪    {}    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟=PLL时钟    while(RCC_GetSYSCLKSource()!=0x08)//检查PLL时钟是否作为系统时钟    {}    } }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-08-17 06:49
参考下我们库函数的教程和代码
gogogo
2楼-- · 2019-08-17 10:17
回复【2楼】正点原子:
---------------------------------
已经解决了,谢谢原子哥。
liudingming
3楼-- · 2019-08-17 14:28
gogogo 发表于 2015-6-8 10:31
回复【2楼】正点原子:
---------------------------------
已经解决了,谢谢原子哥。

兄弟,我也和你碰到同样的问题,配置和你也是一模一样,但是时钟老是在8M,就没有上去过,我使用的外部晶振,8M的。时钟初始化代码如下
void RCC_Configuration(void)
{   
        SystemInit();
        RCC_DeInit();
        /* Enable HSE */
        RCC_HSEConfig(RCC_HSE_ON);   

        /* Wait till HSE is ready */
        HSEStartUpStatus = RCC_WaitForHSEStartUp();
        if(HSEStartUpStatus == SUCCESS)
        {
                /* Flash 2 wait state */
                 FLASH_SetLatency(FLASH_Latency_2);  
                /* Enable Prefetch Buffer */
                FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
               
                /* HCLK = SYSCLK */
                RCC_HCLKConfig(RCC_SYSCLK_Div1);    //至AHB总线、核心存储器和DMA
                /* PCLK2 = HCLK */
                RCC_PCLK2Config(RCC_HCLK_Div1);          //高速AHB时钟        至APB2外设
                /* PCLK1 = HCLK/2 */
                RCC_PCLK1Config(RCC_HCLK_Div2);          //低速AHB时钟        至APB1外设 最大36MHz
               
                /* PLLCLK = 8MHz * 9 = 72 MHz */
                RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  //PLL时钟源及倍频系数
                /* Enable PLL */
                RCC_PLLCmd(ENABLE);
                /* Wait till PLL is ready */
                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
                {
                }
                /* Select PLL as system clock source */
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
                /* Wait till PLL is used as system clock source */
                while(RCC_GetSYSCLKSource() != 0x08)
                {
                }
        }       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1
                                |RCC_APB2Periph_GPIOA
                    |RCC_APB2Periph_GPIOB
                                |RCC_APB2Periph_GPIOC
                    |RCC_APB2Periph_GPIOD
                    |RCC_APB2Periph_GPIOE
                                |RCC_APB2Periph_GPIOF                       
                    |RCC_APB2Periph_ADC1
                                |RCC_APB2Periph_TIM1
                    |RCC_APB2Periph_AFIO
                                |RCC_APB2Periph_SPI1
                                |RCC_APB2Periph_AFIO, ENABLE);        //添加了PA口的外部中断
        RCC_APB1PeriphClockCmd(
                    RCC_APB1Periph_TIM4
                            |RCC_APB1Periph_USART2  
                    |RCC_APB1Periph_USART3
                            |RCC_APB1Periph_UART4
                                |RCC_APB1Periph_UART5   
                    |RCC_APB1Periph_TIM3
                    |RCC_APB1Periph_PWR
                    |RCC_APB1Periph_TIM2
                    |RCC_APB1Periph_BKP, ENABLE );                                  
                
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_DMA2, ENABLE);
}
憨厚诚实大叔
4楼-- · 2019-08-17 20:11
 精彩回答 2  元偷偷看……
liudingming
5楼-- · 2019-08-17 22:10
憨厚诚实大叔 发表于 2016-7-22 09:25
硬件调试看RCC的寄存器,看看系统跑的什么时钟

多谢,已经解决了,是我的匹配电容的问题,刚开始是10pf,后来换成20pf就正常了!
幽谷听溪
6楼-- · 2019-08-17 23:43
遇到同样的问题了,请问你是怎么解决的?

一周热门 更多>