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

STM32 RCC时钟配置流程说明

[复制链接]
zministaryfw 发布时间:2015-2-14 08:49
本帖最后由 zministaryfw 于 2015-2-14 08:53 编辑
$ P- a7 f7 L1 j' W/ `0 a+ P. S* Q3 g- w
RT,如下是stm32系统时钟的配置,若有不足之处,望各位大大指正完善,谢谢!4 x  \5 P7 \# o6 [( y* [9 d

& D: k6 s+ m/ @: r( N
3 M0 D$ v* v+ d
1、如果想要使用系统默认时钟72MHz,则直接调用库函数
      SystemInit();# j) j: F7 }3 C2 q6 w  Z* z. S
   系统默认的时钟配置 如下:
+ w3 ~9 e* A5 O! ?9 X+ x9 z   PLL时钟72MHz  SystemFrequency = SYSCLK_FREQ_72MHz; ' O" Y+ D1 G4 c7 S. m
   系统时钟72MHz SystemFrequency_SysClk =SYSCLK_FREQ_72MHz;   
& u0 Z, _3 @: M4 S; r! b, M2 f8 U$ K   AHB时钟72MHz SystemFrequency_AHBClk = SYSCLK_FREQ_72MHz;   
  s( J7 r5 _5 X/ a2 J   APB1时钟36MHz SystemFrequency_APB1Clk = (SYSCLK_FREQ_72MHz/2);1 b8 N2 Y+ {6 |: v" U" V
   APB2时钟72MHz  SystemFrequency_APB2Clk = SYSCLK_FREQ_72MHz;0 m* W3 k. |  T
! {! ~6 \$ [4 ]: I* u+ q

, X. L" L# X( ~0 a

3 V5 F9 Q- a6 ^8 u$ S
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时钟

% y) ?) L5 |) H) y# n' Q3 [
}

) A0 O4 W( v  p8 I1 `
赞 收藏 1 评论4 发布时间:2015-2-14 08:49

举报

4个回答
damiaa 回答时间:2015-2-14 10:04:31
谢谢分享。
wyxy163@126.com 回答时间:2015-2-14 12:36:27
提示: 作者被禁止或删除 内容自动屏蔽
_ilikerome_ 回答时间:2015-2-14 16:28:35
学些一下,谢谢!
lvyunhua 回答时间:2015-2-14 18:06:42
学习一下。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版