一:基本知识

1、  STM32F103ZE有5个时钟源:HSI、HSE、LSI、LSE、PLL。

   ①、HSI是快速内部时钟,RC振荡器,频率为8MHz,精度不高。

   ②、HSE是快速外部时钟,可接石英/陶瓷谐振器,或者接外部时

              钟源,频率范围为4MHz~16MHz。

③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。  

④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

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

                倍频可选择为2~16倍,可是其输出频率最大不得超过72MHz。

2、系统时钟源有3个:HSI振荡器时钟,HSE振荡器时钟,PLL时钟

3、STM32能够选择一个时钟信号输出到MCO脚(PA8)上,能够选择为PLL

  输出的2分频、HSI、HSE、或者系统时钟。

4、不论什么一个外设在使用之前,必须首先使能其对应的时钟

详细的能够參考:http://www.openedv.com/posts/list/302.htm

二:时钟配置

//#define SystemClK_Flq_8M  8000000  //定义系统时钟8M频率

//#define SystemClK_Flq_12M  12000000

//#define SystemClK_Flq_16M  16000000

//#define SystemClK_Flq_24M  24000000

#define SystemClK_Flq_32M  32000000

//#define SystemClK_Flq_36M  36000000

//#define SystemClK_Flq_40M  40000000

//#define SystemClK_Flq_44M  44000000

//#define SystemClK_Flq_48M  48000000

//#define SystemClK_Flq_52M  52000000

//#define SystemClK_Flq_56M  56000000

//#define SystemClK_Flq_60M  60000000

//#define SystemClK_Flq_64M  64000000

//#define SystemClK_Flq_68M  68000000

//#define SystemClK_Flq_72M  72000000

/*
//函数名称:RCC_HSI_Configuration
//函数功能:启动内部快速时钟
//入口參数:无
//出口參数:无
//技术简要: / */
void RCC_HSI_Configuration(void)
{ RCC_DeInit(); //将外设RCC寄存器重设为缺省值 RCC_HSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//等待HSI就绪 RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); #if defined (SystemClK_Flq_24M)//使用24M为时钟频率
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_6);//设置PLL时钟源及倍频系数
#elif defined (SystemClK_Flq_32M) //使用32M为时钟频率
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8);//设置PLL时钟源及倍频系数
#elif defined (SystemClK_Flq_48M) //使用48M为时钟频率
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);//设置PLL时钟源及倍频系数
#else
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);//设置PLL时钟源及倍频系数
//内部RC震荡8M 有用倍频,固定须要2分频后倍频 为4M,
//默认36M= 4M*9
#endif // RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//使用HSI为时钟源
//8M
// while(RCC_GetSYSCLKSource() != 0x00); /*0x00:HSI作为系统时钟 */ 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作为系统时钟 */ } /*
//函数名称:RCC_HSE_Configuration
//函数功能:启动外部快速时钟
//入口參数:无
//出口參数:无
//技术简要: / */
void RCC_HSE_Configuration(void)
{
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSEConfig(RCC_HSE_ON);/*设置外部快速晶振(HSE) HSE晶振打开(ON)*/
if(RCC_WaitForHSEStartUp() == SUCCESS)/*等待HSE起振, SUCCESS:HSE晶振稳定且就绪*/
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时*/
RCC_PCLK1Config(RCC_HCLK_Div2); /*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/ FLASH_SetLatency(FLASH_Latency_2);/*设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/*选择FLASH预取指缓存的模,预取指缓存使能*/ #if defined (SystemClK_Flq_24M)//使用24M为时钟频率
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_3);/*设置PLL时钟源及倍频系数*/
#elif defined (SystemClK_Flq_32M) //使用32M为时钟频率
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);/*设置PLL时钟源及倍频系数*/
#elif defined (SystemClK_Flq_48M) //使用48M为时钟频率
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);/*设置PLL时钟源及倍频系数*/
#else
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/*设置PLL时钟源及倍频系数*/
//默认晶振8M 时钟频率72M
#endif 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作为系统时钟 */
}
}

STM32学习笔记2-系统时钟知识及程序配置的更多相关文章

  1. STM32学习笔记:系统时钟和SysTick定时器

    原文:http://blog.sina.com.cn/s/blog_49cb42490100s60d.html 1.     STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI.HS ...

  2. 【小梅哥SOPC学习笔记】系统时钟的使用

    给NIOS II CPU添加一颗澎湃的心——系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...

  3. Laravel5.1学习笔记10 系统架构2 应用程序结构

    应用程序结构 简介 根目录 App 目录 为应用程序设置命名空间 简介 默认的 Laravel 应用程序结构是为了给无论构建大型还是小型应用程序都提供一个良好的开始.当然,你可以依照喜好自由地组织应用 ...

  4. STM32学习笔记(九) 外部中断,待机模式和事件唤醒

    学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...

  5. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  6. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

  7. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  8. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

  9. STM32学习笔记(四)——串口控制LED(中断方式)

    目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...

随机推荐

  1. PredictionIO Open Source Machine Learning Server

    PredictionIO Open Source Machine Learning Server Build Smarter Software with Machine Learning Predic ...

  2. codeforces 437C The Child and Toy

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  3. MVC与WebForm的简单的比较

    MVC与WebForm的简单的比较 ASP 强制程序员将业务逻辑和展示页放到一个文件中 WebForm 允许程序员将业务逻辑与页面展示分开到不同的文件中,并且提供强大的开发平台来写  业务逻辑代码  ...

  4. jQuery 查询 xml

    加载xml:(注:这个方法在Chrome是用不了的,Chrome是禁止访问本地的xml文件,在ie11里面用不了,ie11的xmlDom文档没有load方法) function loadXML(fil ...

  5. linux环境设置:使ftp不输密码

    # cd ~; # vi .netrc; Add beloew words, 可以追加多个账户: machine yourservername login yourname password your ...

  6. C++如何屏蔽双击运行程序功能?

    问题描述: 我们开发过程中可能会经常遇到,需要屏蔽EXE的双击运行功能,只能通过宿主程序(Service或EXE)来启动.比如腾讯的迷你弹窗,就只能通过主程序来启动,而不能直接通过双击来运行. 实现原 ...

  7. OCP-1Z0-042-V12.39-51题

    51.Which two statements regarding archive log destinations are true? 题目解析: A(正确)因为:.归档日志最多可以配置10个 B和 ...

  8. log4net结构

    log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.其大致分为如下这些模块. Appenders模 ...

  9. [置顶] Java 8全面解析!不知道的来看看那!

    java8的面世惊动了不少业界人员,让我们一起来看看吧! 函数式接口 函数式接口是只定义了一个抽象方法的接口.Java 8引入了FunctionalInterface注解来表明一个接口打算成为一个函数 ...

  10. Java 异常解决之java.lang.IllegalArgumentException: Comparison method violates its general contract!

    Java 异常解决 在你的代码前加一句 System.setProperty("java.util.Arrays.useLegacyMergeSort", "true&q ...