STM32时钟配置

发布时间:2016-12-10 3:19:56 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"STM32时钟配置",主要涉及到STM32时钟配置方面的内容,对于STM32时钟配置感兴趣的同学可以参考一下。

STM32时钟配置 在STM32中,有五个时钟源,为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。   在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法:    2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。    2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。  使用HSE时钟,程序设置时钟参数流程: 1、将RCC寄存器重新设置为默认值   RCC_DeInit; 2、打开外部高速时钟晶振HSE    RCC_HSEConfig(RCC_HSE_ON); 3、等待外部高速时钟晶振工作    HSEStartUpStatus = RCC_WaitForHSEStartUp(); 4、设置AHB时钟         RCC_HCLKConfig; 5、设置高速AHB时钟     RCC_PCLK2Config; 6、设置低速速AHB时钟   RCC_PCLK1Config; 7、设置PLL              RCC_PLLConfig; 8、打开PLL              RCC_PLLCmd(ENABLE); 9、等待PLL工作   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) 10、设置系统时钟        RCC_SYSCLKConfig; 11、判断是否PLL是系统时钟     while(RCC_GetSYSCLKSource() != 0x08) 12、打开要使用的外设时钟    RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()     下面是TM32软件固件库的程序中对RCC的配置函数(使用外部8MHz晶振) /******************************************************************************* * Function Name : RCC_Configuration * Description : RCC配置(使用外部8MHz晶振) * Input : 无 * Output : 无 * Return : 无 *******************************************************************************/ void RCC_Configuration(void) { /*将外设RCC寄存器重设为缺省值 */ RCC_DeInit(); /*设置外部高速晶振(HSE)*/ RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打开(ON) /*等待HSE起振*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪 { /*设置AHB时钟(HCLK)*/ RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB时钟 = 系统时钟 /* 设置高速AHB时钟(PCLK2)*/ RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2时钟 = HCLK /*设置低速AHB时钟(PCLK1)*/ RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1时钟 = HCLK / 2 /*设置FLASH存储器延时时钟周期数*/ FLASH_SetLatency(FLASH_Latency_2); //FLASH_Latency_2 2延时周期 /*选择FLASH预取指缓存的模式*/ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 预取指缓存使能 /*设置PLL时钟源及倍频系数*/ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // PLL的输入时钟 = HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9 /*使能PLL */ RCC_PLLCmd(ENABLE); /*检查指定的RCC标志位(PLL准备好标志)设置与否*/ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /*设置系统时钟(SYSCLK) */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //RCC_SYSCLKSource_PLLCLK——选择PLL作为系统时钟 /* PLL返回用作系统时钟的时钟源*/ while(RCC_GetSYSCLKSource() != 0x08) //0x08:PLL作为系统时钟 { } } /*使能或者失能APB2外设时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); //RCC_APB2Periph_GPIOA GPIOA时钟 //RCC_APB2Periph_GPIOB GPIOB时钟 //RCC_APB2Periph_GPIOC GPIOC时钟 //RCC_APB2Periph_GPIOD GPIOD时钟 } From:http://www.cnblogs.com/Neddy/archive/2012/07/18/STM32%E6%97%B6%E9%92%9F%E9%85%8D%E7%BD%AE.html

上一篇:谈谈struts2的理解
下一篇:动态规划(一)最长公共子序列问题 LCS 总结

相关文章

关键词: STM32时钟配置

相关评论