新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2017-12-18
- 在线时间
- 3 小时
|
1金钱
系统时钟源采用HSI,系统时钟设置为36MHz,PCLK2配置为18M,用两种配置方式进行了配置,其中,方式1可正确配置,方式2无法正确配置,对比之后,主要是配置顺序不同,但不清楚问题到底出在哪里?求大神指点
方式1:可正确配置的代码
void CLOCK_Init(void)
{
/*通过用示波器对SPI的时钟信号的读取,得到时钟信号的频率为18MHz*/
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSICmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //等待HSI就绪
RCC_HCLKConfig(RCC_SYSCLK_Div1); /*设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时*/
RCC_PCLK2Config(RCC_HCLK_Div1); /* 设置高速AHB时钟(PCLK2)RCC_HCLK_Div2——APB2时钟 = HCLK/2*/
FLASH_SetLatency(FLASH_Latency_2); /*设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /*选择FLASH预取指缓存的模,预取指缓存使能*/
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);/*设置PLL时钟源及倍频系数,频率为8/2*9=36Mhz*/
RCC_PLLCmd(ENABLE); /*使能PLL */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /*检查指定的RCC标志位(PLL准备好标志)设置与否*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK) */
while (RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL作为系统时钟 *///在进行一次系统时钟源的确认
}
方式2:不能正确配置的代码
void CLOCK_Init(void)
{
/*通过用示波器对SPI的时钟信号的读取,得到时钟信号的频率为18MHz*/
RCC_DeInit();
RCC_HSICmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //等待HSI就绪
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //PLL时钟配置
RCC_PLLCmd(ENABLE);
FLASH_SetLatency(FLASH_Latency_1); /*设置FLASH存储器延时时钟周期数FLASH_Latency_1 1延时周期*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /*选择FLASH预取指缓存的模,预取指缓存使能*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //配置系统时钟为PLL时钟 36MHz
while(RCC_GetSYSCLKSource()!=0x08); //检查系统时钟源是否为HSI
RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置ABH时钟频率
RCC_PCLK2Config(RCC_HCLK_Div1); /* 设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/
}
求指教,为什么顺序不一致的时候,会产生这种结果。
|
|