历史上的今天
返回首页

历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2018年10月10日 | STM32F103时钟配置流程

2018-10-10 来源:eefocus

前言:

一般情况下单片机的时钟配置是单片机程序中的第一步,也是很重要的一步。这时候我们需要考虑以下几个问题。

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和高速PCLK2;PCLK1是从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);

 

第七步              设置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       Independent Watchdog                                   独立看门狗

                  

RTC           Real Time Clock                                                      实时时钟

                   时钟源可以是LSI,或者LSE,再或者HSE的128分频。

LSI             Low Speed Internal                                                       内部低速时钟

                   RC振荡器,频率为40kHz。供IWDG使用,还能作为RTC的时钟源。

HSI            High Speed Internal                                             内部高速时钟

                   RC振荡器,频率为8MHz。

HSE           High Speed External                                             外部高速时钟

                   可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 

 

PLL            锁相环倍频输出

                   其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍, 

 

SYSCLK     System Colock                                                                 系统时钟

                  

AHB          AdvancedHigh performance Bus                   高级高性能总线

                   AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。

 

APB          Advanced Peripheral Bus                                  高级外围设备总线

                   APB主要用于外设模块(如ADC、USB、SPI、UART等)与AHB之间的连接。

 

HCLK         Advanced High performance Bus Clock                 高级高性能总线时钟

                   就是SYSCLK经过AHB Prescaler(预分频器)后得到的AHB的时钟。

 

PCLK         Peripheral Bus Clock                                            外围设备总线时钟                  

                   PCLK有两个,一个是低速的PCLK1,另一个是高速的PCLK2。

                   PCLK1是经过APB1 Prescaler后得到的APB1时钟。

PCLK2是经过APB2 Prescaler后得到的APB2时钟。

 

FCLK                   Free Runing 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 时的延迟相同。


推荐阅读

史海拾趣

HBControls公司的发展小趣事
首先确认冰箱电源是否正常,插头是否牢固插入插座,电源插座是否有电。
台湾凯励(Carli)公司的发展小趣事

作为一家有社会责任感的企业,凯励公司始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,凯励公司还积极参与社会公益活动,为社区和环境贡献自己的力量。这些举措不仅体现了凯励公司的社会责任感,也为其在电子行业树立了良好的形象。

Golledge Electronics公司的发展小趣事

作为一家有社会责任感的企业,凯励公司始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,凯励公司还积极参与社会公益活动,为社区和环境贡献自己的力量。这些举措不仅体现了凯励公司的社会责任感,也为其在电子行业树立了良好的形象。

宇阳科技(EYANG)公司的发展小趣事

在MLCC领域取得显著成就的同时,宇阳科技也在积极拓展其他业务领域。公司利用在MLCC领域积累的技术和经验,成功研发了多款新型电子元器件,并为移动通信、计算机及外设、数字视听产品等领域提供元器件方案设计、选型和配套综合服务。此外,宇阳科技还积极进军移动手机市场,通过参股、合作等方式,成功涉足移动手机软件及硬件设计、制造和销售等领域。

BUSSMANN公司的发展小趣事

1985年,库柏工业收购了Bussmann公司,成立了新的事业部——“Cooper Bussmann熔断器”。这一收购为Bussmann带来了更广阔的市场和更多的资源,同时也带来了新的挑战和机遇。在库柏工业的支持下,Bussmann开始了更加积极的创新和市场拓展,逐渐成为了全球熔断器行业的领导者。

Condor公司的发展小趣事

1985年,库柏工业收购了Bussmann公司,成立了新的事业部——“Cooper Bussmann熔断器”。这一收购为Bussmann带来了更广阔的市场和更多的资源,同时也带来了新的挑战和机遇。在库柏工业的支持下,Bussmann开始了更加积极的创新和市场拓展,逐渐成为了全球熔断器行业的领导者。

问答坊 | AI 解惑

单片机控制 3个220V电动机

我现在想用单片机来控制 3个220V电动机  或是 5个电动机     而一般的电路设计是 光偶 加 可控硅 实现关与开  或是继电器实现     但是电动机开与关 到底有没有执行单片机没有得到 ...…

查看全部问答>

LC谐振频率计算器

LC谐振频率计算器,不知道大家用不用得上,可以由他设计滤波器…

查看全部问答>

用电池做电源应当如何稳压?

使用电池做电源时会出现电压下降和内阻等增加等麻烦,因此一直想弄明白:能不能实现稳压以尽可能保持电路稳定?一般使用什么器件和方式?有什么原则和注意的?…

查看全部问答>

SEGA MD5的开发包

SEGA MD是很久以前的TV游戏机, 前些时候整理了一下, 找到完整的开发包: 1)C,汇编开发工具和库; 2)调试工具(免ICE开发); 3)MIDI音乐转换工具; 工具虽老了些,但当初用这个工具开发过很多的商业SEGA游戏, 包括为日本著名游戏厂家BANDAI开发的SEGA ...…

查看全部问答>

高可靠性心电采集电路

按国内医学会制定的心电图标准,心电信息数字化精度不小于12bit,(信号输入范围+/-5mV的情况下,心电信号最小分辨率2.44uV)心电采样率不低于500Hz 我们想做一款心电图的分析软件,想找一个可靠心电电路,当然比上面标准更高的更好 最好有实际使用过 ...…

查看全部问答>

求AT指令截取手机屏幕方法?

请问AT指令怎么样可以截取到手机屏幕内容(全屏,或者部分都可以) 谢谢.…

查看全部问答>

请教高手:应用层关闭后,winlogon占用cpu过高。

一个can卡驱动,通讯时运行良好,可是应用层程序关闭后,winlogon占用cpu过高。请教高手这是什么原因?…

查看全部问答>

赠送3片8962芯片,见图

赠送3片8962芯片,BGA封装的,自己付快递费就行,红线内就是 …

查看全部问答>

问用仿真器仿真的运行速度问题

用仿真器进行仿真运行,速度是不是比实际在板子上运行要慢阿? 如果是的话,怎样设置能使其速度快点阿? 我用的是2812板…

查看全部问答>

请高手给个开关电源设计方案

本帖最后由 paulhyde 于 2014-9-15 09:18 编辑 希望模块比较完整,有过流保护等,  …

查看全部问答>