主程序中已经有配置系统时钟了,但配置了也达不到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时钟是否作为系统时钟
{}
}
}
---------------------------------
已经解决了,谢谢原子哥。
兄弟,我也和你碰到同样的问题,配置和你也是一模一样,但是时钟老是在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);
}
多谢,已经解决了,是我的匹配电容的问题,刚开始是10pf,后来换成20pf就正常了!
一周热门 更多>