我用如下代码(Stm32_Clock_Init给的参数是9)初始化时钟的话delay_ms(1000)是延时1s。delay_ms就是原子哥给的那个delay.c里的东西。
void reset(void)
{
RCC->APB1RSTR = 0x00000000; //复位APB1
RCC->APB2RSTR = 0x00000000; //复位APB2
RCC->AHBENR = 0x00000014; //睡眠模式闪存和SRAM时钟时能
RCC->APB2ENR = 0x00000000; //关闭所有外设
RCC->APB1ENR = 0x00000000;
RCC->CR |= 0x00000001; //开启内部8M时钟
RCC->CFGR &= 0xF8FF0000;
RCC->CR &= 0xFEF6FFFF;
RCC->CR &= 0xFFFBFFFF;
RCC->CFGR &= 0xFF80FFFF;
RCC->CIR = 0x00000000;
}
void Stm32_Clock_Init(unsigned char PLL)
{
unsigned char temp=0;
reset();
RCC->CR|=0x00010000;
while(!(RCC->CR>>17));
RCC->CFGR=0x00000400;
PLL-=2;
RCC->CFGR|=PLL<<18;
RCC->CFGR|=1<<16;
FLASH->ACR|=0x32;
RCC->CR|=0x01000000;
while(!(RCC->CR>>25));
RCC->CFGR|=0x00000002;
while(temp!=0x02)
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
但是如果我用下面代码初始化时钟的话 delay_ms(1000)是延时2s。我觉得这两种初始化应该是一样的呀。
void RCC_HSE_Configuration()
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
if(RCC_WaitForHSEStartUp() == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div2);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
}
}
|