OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2566|回复: 1

关于两种HSI时钟配置方式的问题

[复制链接]

2

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-12-18
在线时间
3 小时
发表于 2018-1-8 14:04:52 | 显示全部楼层 |阅读模式
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*/
}

求指教,为什么顺序不一致的时候,会产生这种结果。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-9 00:50:53 | 显示全部楼层
仿真,跟踪,看寄存器变化,对比,分分钟出结果啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 15:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表