博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32学习笔记2-系统时钟知识及程序配置
阅读量:6137 次
发布时间:2019-06-21

本文共 3569 字,大约阅读时间需要 11 分钟。

 一:基本知识 

 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、不论什么一个外设在使用之前,必须首先使能其对应的时钟

详细的能够參考:

二:时钟配置

//#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作为系统时钟 */    }}

 

 

 

 

 

转载地址:http://oskya.baihongyu.com/

你可能感兴趣的文章
Project Volta 让 Android 续航提升了多少?
查看>>
《树莓派实战秘籍》——1.7 技巧07使用过压获得更高的性能
查看>>
《SAS 统计分析与应用从入门到精通(第二版)》一1.4 SAS系统的文件管理
查看>>
《众妙之门——网页设计专业之道》——2.4 总结
查看>>
MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)
查看>>
Java 注解详解 (annotation)
查看>>
鹰眼跟踪、限流降级,EDAS的微服务解决之道
查看>>
秘籍:程序猿该如何实力撩妹
查看>>
网络编程socket基本API详解
查看>>
API接口设计 OAuth2.0认证
查看>>
Mysql5.6的1755错误解决办法
查看>>
在命令行中运行“mvn compile”因为中文报错
查看>>
Docker的技术不再局限于测试和开发
查看>>
技术干货:工欲善其事,必先利其器 阿里云数据库系列谈之一
查看>>
禁用ViewState
查看>>
深入理解Java HashMap实现原理
查看>>
阿里云备案获取服务号
查看>>
深入理解Python中的__builtin__和__builtins__
查看>>
YII AJAX registerScript
查看>>
ARC forbids explicit message send of 'retainCount'
查看>>