STM32学习笔记2-系统时钟知识及程序配置
一:基本知识
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-系统时钟知识及程序配置的更多相关文章
- STM32学习笔记:系统时钟和SysTick定时器
原文:http://blog.sina.com.cn/s/blog_49cb42490100s60d.html 1. STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI.HS ...
- 【小梅哥SOPC学习笔记】系统时钟的使用
给NIOS II CPU添加一颗澎湃的心——系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...
- Laravel5.1学习笔记10 系统架构2 应用程序结构
应用程序结构 简介 根目录 App 目录 为应用程序设置命名空间 简介 默认的 Laravel 应用程序结构是为了给无论构建大型还是小型应用程序都提供一个良好的开始.当然,你可以依照喜好自由地组织应用 ...
- STM32学习笔记(九) 外部中断,待机模式和事件唤醒
学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...
- STM32学习笔记——OLED屏
STM32学习笔记--OLED屏 OLED屏的特点: 1. 模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2. 显示尺寸为0.96寸 3. 分辨率为128*64 4. ...
- STM32学习笔记——点亮LED
STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
- stm32学习笔记——外部中断的使用
stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...
- STM32学习笔记(四)——串口控制LED(中断方式)
目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...
随机推荐
- javascript笔记整理(正则)
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具 var re=/e/; var re=new RegExp('e'); 正则表达式的 String 对象的方法 1.search- ...
- 有关oppo蝴蝶解锁的三D技术
oppo手机的界面设计也是很漂亮的.在很多界面中使用了3D技术塑造出了大量华丽的效果.在蝴蝶解锁中使用了两个对称的三D变幻,宛如蝴蝶翅膀上美丽的花纹.在受到用户点击后,随风缓慢上下扇动,充满浪漫的动感 ...
- poj 1155 TELE (树形背包dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: poj-1155 题意 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构, ...
- Android Socket 开发技术
根据之前的经验,应用软件的网络通信无非就是Socket和HTTP,其中Socket又可以用TCP和UDP,HTTP的话就衍生出很多方式,基础的HTTP GET和POST请求,然后就是WebServic ...
- delphi高手突破之异常及错误处理
什么是异常?为什么要用它? 所谓“异常”是指一个异常类的对象.Delphi的VCL中,所有异常类都派生于Exception类.该类声明了异常的一般行为.性质.最重要的是,它有一个Message属性可以 ...
- 改动导航栏上返回button上的字,比如把back改动为返回
改动导航栏上返回button上的字,比如把back改动为返回 注意:这个须要在跳转之前到视图控制器中写,而不是在跳转之后到控制器中写 UIBarButtonItem *backIetm = [[UIB ...
- MSSQL - 根据时间倒序删除第一行数据
delete top(1) from Tb_PaintOut where PaintNumber = (select top (1) PaintNumber from Tb_PaintOut orde ...
- C++中 auto自己主动变量,命名空间,using作用以及作用域
1.autokeyword的用途 A:自己主动变量.能够自己主动获取类型,输出,类似泛型 B:自己主动变量,能够实现自己主动循环一维数组 C:自己主动循环的时候,相应的必须是常量 2.auto自 ...
- Kendo UI开发教程(20): Kendo MVVM 数据绑定(九) Text
Text绑定可以使用ViewModel来设置DOM元素的文本属性,如果需要设置input,textarea,或select的显示,需要使用value属性. 1 <span data-bind=& ...
- HTTP数据包头解析(简单清楚)
[转]HTTP请求模型和头信息参考 参考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx模型: http://blog.c ...