找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16550|回复: 11
打印 上一主题 下一主题
收起左侧

STM32F103时钟配置流程

  [复制链接]
跳转到指定楼层
楼主
ID:276663 发表于 2018-3-15 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 IdeaMing 于 2018-3-16 10:15 编辑

STM32F103时钟配置流程



前言:
一般情况下单片机的时钟配置是单片机程序中的第一步,也是很重要的一步。这时候我们需要考虑以下几个问题。
1. 系统时钟的时钟源用哪个。
2. 系统时钟频率要多少。
3. 每个模块的时钟频率要多少。
4. 如果外部时钟出了问题,这个时候时钟是怎么运行的。

下面就针对性的讲一讲STM32F103的时钟配置。



知识点:
1. 系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。

2. STM32F103的三个可以作为系统时钟的时钟源,分别是HSI、HSE、PLL。而PLL的时钟源是HSI/2(内部RC振荡器二分频)、HSE。

3.如果使用HSI,系统时钟我们能达到的最大频率是64MHz,如果使用HSE,系统时钟最大频率是72MHz

4.APB时钟有低速PCLK1和高速PCLK2PCLK1是从HCLK二分频得到的,最大36MHZ,根据上一条知识点如果是使用HSI,则最快是32MHz

5. PLL的设定需要在使能之前,一旦PLL使能后参数不可更改。

6.附录是一些缩写的英文全称,也有一些补充的知识点。


步骤:
第一步     初始化时钟
         不管现在SYSCLK的时钟源是哪个,我们要更换时钟源。先RCC_DeInit();

第二步              打开时钟
         内部高速时钟HSI           RCC_HSICmd(ENABLE);
         外部高速时钟HSE          RCC_HSEConfig(RCC_HSE_ON);

第三步              等待时钟晶振工作
         HSI            While(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);
         HSE           While(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);

第四步              设置AHB时钟HCLK
                                                                 RCC_HCLKConfig(RCC_SYSCLK_Div1);
        分频系数自己设定,一般都是RCC_SYSCLK_Div1即不分频。

第五步              设置低速APB时钟
                                                                 RCC_PCLK1Config(RCC_HCLK_Div2);

第六步              设置高速APB时钟
                                                                 RCC_PCLK2Config(RCC_HCLK_Div1);
第七步              设置Flash预缓冲
                                                                 FLASH_SetLatency(FLASH_Latency_2);
                                              FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);          // 使能flash预缓冲
       Flash的操作也没有总线时钟快,所以需要总线在操作flash时稍作等待。推荐根据HCLK设置。
0-24MHz时,取FLASH_Latency_0;24-48MHz,取FLASH_Latency_1;48-72MHz时,取FLASH_Latency_2。

第八步              设置PLL                     如果不使用PLL,请略过此步骤
         HSI                                                  RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16 );
         HSE                                                 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );

第九步              打开PLL                     如果不使用PLL,请略过此步骤
                                                                 RCC_PLLCmd(ENABLE);

第十步              等待PLL工作          如果不使用PLL,请略过此步骤
                                                                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);

第十一步              设置系统时钟
         HSI                                                  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
         HSE                                                 RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
         PLL                                                  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
第十二步         判断是否是设置的时钟
         HSI                                                  while(RCC_GetSYSCLKSource()!= 0x00);
         HSE                                                 while(RCC_GetSYSCLKSource()!= 0x04);
         PLL                                                  while(RCC_GetSYSCLKSource()!= 0x08);



附录:一些缩写的英文全称及中文翻译,帮助理解记忆。
IWDG       IndependentWatchdog                                   独立看门狗

RTC           RealTime Clock                                                      实时时钟
                   时钟源可以是LSI,或者LSE,再或者HSE128分频。
LSI             LowSpeed Internal                                                       内部低速时钟
                   RC振荡器,频率为40kHz。供IWDG使用,还能作为RTC的时钟源。
HSI            HighSpeed Internal                                             内部高速时钟
                   RC振荡器,频率为8MHz
HSE           HighSpeed External                                             外部高速时钟
                   可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz

PLL          PhaseLockedLoop                                                   锁相环倍频输出
                   其时钟输入源可选择为HSI/2HSE或者HSE/2。倍频可选择为2~16倍,

SYSCLK     SystemColock                                                                 系统时钟

AHB          AdvancedHigh performance Bus                   高级高性能总线
                   AHB主要用于高性能模块(CPUDMADSP)之间的连接。

APB          Advanced PeripheralBus                                  高级外围设备总线
                   APB主要用于外设模块(ADCUSBSPIUART)AHB之间的连接。

HCLK         Advanced High performance Bus Clock                 高级高性能总线时钟
                   就是SYSCLK经过AHBPrescaler(预分频器)后得到的AHB的时钟。

PCLK         PeripheralBus Clock                                            外围设备总线时钟                  
                   PCLK有两个,一个是低速的PCLK1,另一个是高速的PCLK2
                   PCLK1是经过APB1Prescaler后得到的APB1时钟。
PCLK2是经过APB2 Prescaler后得到的APB2时钟。

FCLK                   FreeRuning Clock                                                  自由运行时钟
为供给CPU内核的时钟信号,CPU的主频就是指这个信号;1/FCLK就是CPU时钟周期。
为什么叫自由运行时钟呢?下面是别人家的讲解。
ARMJISHU注:FCLK 为处理器的自由振荡的处理器时钟,用来采样中断和为调试模块计时。在处理器休眠时,通过FCLK 保证可以采样到中断和跟踪休眠事件。 Cortex-M3内核的“自由运行时钟(free running clock)”FCLK。“自由”表现在它不来自系统时钟HCLK,因此在系统时钟停止时FCLK也继续运行。FCLK和HCLK 互相同步。FCLK 是一个自由振荡的HCLK。FCLK 和HCLK 应该互相平衡,保证进入Cortex-M3 时的延迟相同。


STM32F103时钟配置流程.pdf (394.67 KB, 下载次数: 164)



评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:276663 发表于 2018-3-16 09:06 | 只看该作者
这个时钟配置完了之后就是端口时钟的开关,外设总线的时钟速度,比如SPI.
回复

使用道具 举报

板凳
ID:276663 发表于 2018-3-16 10:16 | 只看该作者
IdeaMing 发表于 2018-3-16 09:06
这个时钟配置完了之后就是端口时钟的开关,外设总线的时钟速度,比如SPI.

第二版本增加了第七步,flash的操作延时设置和flash预缓冲的设置。
回复

使用道具 举报

地板
ID:127084 发表于 2018-3-16 15:47 | 只看该作者
非常有用,果断下载 先谢楼主
回复

使用道具 举报

5#
ID:68875 发表于 2018-7-8 21:49 | 只看该作者
good job
回复

使用道具 举报

6#
ID:269314 发表于 2018-7-9 17:48 | 只看该作者
赞!真的很清楚明白,小弟有个疑问,恭请楼主帮忙解惑,感谢!

小弟启用的是外部时钟,即HSE,前十步都与楼主一致,但在第十一、十二步,使用的是PLL对应的代码,这个与使用HSE对应的代码有啥区别和影响呢?再次感谢!
回复

使用道具 举报

7#
ID:231528 发表于 2018-7-9 21:20 | 只看该作者
非常感谢
回复

使用道具 举报

8#
ID:276663 发表于 2018-8-23 16:40 | 只看该作者
pc333 发表于 2018-7-9 17:48
赞!真的很清楚明白,小弟有个疑问,恭请楼主帮忙解惑,感谢!

小弟启用的是外部时钟,即HSE,前十步都 ...

HSE就是你外面接的那个晶振频率。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:112471 发表于 2018-11-15 13:12 | 只看该作者
厉害啊
回复

使用道具 举报

10#
ID:51905 发表于 2019-1-16 17:13 | 只看该作者
不错~~
回复

使用道具 举报

11#
ID:436417 发表于 2019-6-11 20:11 | 只看该作者
非常有用
回复

使用道具 举报

12#
ID:461428 发表于 2019-6-23 19:03 | 只看该作者
急需的东东,,谢谢
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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