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-系统时钟知识及程序配置

时间: 2024-11-03 05:31:21

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

学习笔记-Linux系统基础知识2

shell GUI :graphic User Interface x-window CS架构 Gnome KDE Xface CLI: Command Line Interface sh bash csh ksh zsh tcsh dll: Dynamic Link Library .so: shared object login: 用户名:用户ID 认证机制: Authentication 授权:Authorization 审计:Audition(日志) prompt:命令提示符 命令: m

stm32学习笔记之win8系统下,keil4出现黑块的解决方法

前不久,笔者安装keil4启动会出现黑块,如图所示 当时询问了不少技术群都没有找到解决办法,并且还在百度贴吧发贴,最终都无果而终 这是当时发贴地址 http://tieba.baidu.com/p/3176578044 后来重做了个系统,才勉强能使用.直至今天又出现了同样的状况.在此之间笔者发现当keil4出现黑块,win8自带的记事本也会出现未响应状况,于是上网找解决方法,最终网友 oafaq给了我思路 这是他的原文地址 http://blog.sina.com.cn/key9928 .原来我

STM32学习笔记——USART串口(向原子哥和火哥学习)

一.USART简介 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择. STM32 的串口资源相当丰富的,功能也相当强劲.STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器,支持同步单向通信和半双工单线通信,支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作.它还允许多处理器通信.

STM32学习笔记6(TIM通用模块生成PWM)

1.     TIMER输出PWM基本概念   脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就是对脉冲宽度的控制.一般用来控制步进电机的速度等等. STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出. 1.1   PWM输出模式 S

STM32学习笔记之一(初窥STM32)

怎么做好学习笔记? 答:自我感知-->学习知识-->归纳总结-->自我升华(真正属于自己的知识是,抛开书本,运用时,你还能记得的思想) 自我感知--看到知识概念,先自我感觉那应该是个什么东西(如:寄存器---寄存东西(数据)的地方嘛) 学习知识--有了自我感知后,就需要验证自己的感知是否正确,请记住,带着自己思想的学习是最高效的学习(如:寄存器---存什么东西呢?) 归纳总结--学习了大量知识后,就该汇总汇总了(如:寄存器---存数据(通用寄存器),存命令(PC),存地址(LR)) 自我

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

学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为例详细讲解这些内容,希望对每一个阅读者有帮助. 1.外部中断 如果已经学习了SysTick系统时钟滴答实验,掌握了Cortex-M3中断的相关知识,那么外部中断也是比较好理解的,和SysTick中断一样,外部中断也是当有信号触发时,如果中断屏蔽寄存器允许触发,就会产生中断,这时CPU查找中断向量表,

APUE 学习笔记(一) Unix基础知识

1. Unix 体系结构 内核的接口被称为系统调用 公用函数库构建在系统调用接口之上 应用软件既可以调用公用函数库,也可以直接进行系统调用 2. 文件和目录 目录操作函数:opendir---> readdir---> closedir struct dirent 结构体 stat 系统调用 3.程序.进程.线程 程序:存放在磁盘上.并处于某个目录中的一个可执行文件.使用exec系列函数将程序从磁盘读入存储器,并使其执行 进程:程序的执行实体.进程控制的3个函数:fork.exec.waitp

STM32学习笔记1(ADC多通道采样)

STM32 ADC多通道转换描述:用ADC连续采集11路模拟信号,并由DMA传输到内存.ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ.在每次转换结束后,由DMA循环将转换的数据传输到内存中.ADC可以连续采集N次求平均值.最后通过串口传输出最后转换的结果.程序如下:#i nclude "stm32f10x.h" //这个头文件包括STM32F10x所有外围寄存器.位.内存映射的定义#i nclude "eval.h" //头文件(包括串口.按键.L

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

目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类型并使能串口中断 七.编写中断服务函数函数名格式为函数名格式为 USARTxIRQHandler(x 对应串口号). 八.主函数的实现. 一.时钟使能,包括GPIO的时钟和串口的时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //