你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 RCC时钟配置流程说明

[复制链接]
zministaryfw 发布时间:2015-2-14 08:49
本帖最后由 zministaryfw 于 2015-2-14 08:53 编辑

RT,如下是stm32系统时钟的配置,若有不足之处,望各位大大指正完善,谢谢!


1、如果想要使用系统默认时钟72MHz,则直接调用库函数
      SystemInit();
   系统默认的时钟配置 如下:
   PLL时钟72MHz  SystemFrequency = SYSCLK_FREQ_72MHz;
   系统时钟72MHz SystemFrequency_SysClk =SYSCLK_FREQ_72MHz;   
   AHB时钟72MHz SystemFrequency_AHBClk = SYSCLK_FREQ_72MHz;   
   APB1时钟36MHz SystemFrequency_APB1Clk = (SYSCLK_FREQ_72MHz/2);
   APB2时钟72MHz  SystemFrequency_APB2Clk = SYSCLK_FREQ_72MHz;



2、若自己定义时钟,则利用RCC的一些库函数配置,配置流程如下:
    <1>RCC_DeInit();
    <2>使能外部高速晶振;
    <3>使能预取指缓存(flash);          //一般可不用配置
    <4> 设置代码延时值;                   //一般可不用配置
    <5>设置高速总线时钟;
    <6>设置低速总线2时钟;
    <7>设置低速总线1的时钟;
    <8>配置PLL时钟;
   <9>使能PLL时钟;
   <10>设置系统时钟;
   <11>使能外设时钟
具体代码如下:
void RCC_Configuration(void)
{
   RCC_DeInit();        ///重置了RCC的设置,类似寄存器复位
  RCC_HSEConfig(RCC_HSE_ON);     ///使能外部高速晶振
  while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);          //等待HSE稳定
/*
  ////          注意:等待HSE稳定亦可用下面的函数语句
  /////         HSEStartUpStatus =    RCC_WaitForHSEStartUp();
  /////         if (HSEStartUpStatus == SUCCESS)
////                {
////                               将下面的函数全部(<3>到<11>)包含近来即可
////                }
*/
   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); ///使能预取指缓存     //一般可不用配置
   FLASH_SetLatency(FLASH_Latency_2);      ///设置代码延时值;令Flash处于等待状态,2是针对高频时钟   //一般可不用配置
   RCC_HCLKConfig(RCC_SYSCLK_Div1);  ///设置高速总线时钟=系统时钟
  RCC_PCLK2Config(RCC_HCLK_Div1);      ///设置低速总线2时钟=高速总线时钟
  RCC_PCLK1Config(RCC_HCLK_Div2);   ///  设置低速总线1的时钟=高速时钟的二分频
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); ///配置PLL时钟 ,利用锁相环讲外部8Mhz晶
                                                                                                  ///   9倍频到72Mhz
  RCC_PLLCmd(ENABLE);          ///使能PLL时钟
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);      ///等待锁相环输出稳定
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);              ///  将锁相环输出设置为系统时钟
  while(RCC_GetSYSCLKSource() != 0x08);             ///校验PLL是否为系统时钟
  使能外围接口总线时钟,注意各外设的隶属情况,不同芯片的分配不同;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);// 使能APB2外设GPIOB时钟
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);// 使能APB2外设GPIOA时钟
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);// 使能APB2外设GPIOC时钟

}

收藏 1 评论4 发布时间:2015-2-14 08:49

举报

4个回答
damiaa 回答时间:2015-2-14 10:04:31
谢谢分享。
数码小叶 回答时间:2015-2-14 12:36:27
_ilikerome_ 回答时间:2015-2-14 16:28:35
学些一下,谢谢!
lvyunhua 回答时间:2015-2-14 18:06:42
学习一下。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版