[应用相关] 系统时钟RCC详解(超详细,超全面)

[复制链接]
 楼主| 发给她更好fh 发表于 2021-4-27 15:04 | 显示全部楼层
代码实现:
对RCC的配置函数(使用外部8MHz晶振)  

系统时钟72MHz,APH 72MHz,APB2 72MHz,APB1 32MHz,USB 48MHz TIMCLK=72M
 楼主| 发给她更好fh 发表于 2021-4-27 15:04 | 显示全部楼层
  1. void RCC_Configuration(void)
  2. {
  3.         //----------使用外部RC晶振-----------
  4.         RCC_DeInit();                        //初始化为缺省值
  5.         RCC_HSEConfig(RCC_HSE_ON);        //使能外部的高速时钟
  6.         while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);        //等待外部高速时钟使能就绪
  7.        
  8.         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);        //Enable Prefetch Buffer
  9.         FLASH_SetLatency(FLASH_Latency_2);                //Flash 2 wait state
  10.        
  11.         RCC_HCLKConfig(RCC_SYSCLK_Div1);                //HCLK = SYSCLK
  12.         RCC_PCLK2Config(RCC_HCLK_Div1);                        //PCLK2 =  HCLK
  13.         RCC_PCLK1Config(RCC_HCLK_Div2);                        //PCLK1 = HCLK/2
  14.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);        //PLLCLK = 8MHZ * 9 =72MHZ
  15.         RCC_PLLCmd(ENABLE);                        //Enable PLLCLK

  16.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);        //Wait till PLLCLK is ready
  17.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);        //Select PLL as system clock
  18.         while(RCC_GetSYSCLKSource()!=0x08);                //Wait till PLL is used as system clock source
  19.        
  20.         //---------打开相应外设时钟--------------------
  21.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);        //使能APB2外设的GPIOA的时钟                 
  22. }
 楼主| 发给她更好fh 发表于 2021-4-27 15:05 | 显示全部楼层
也就是我们时钟树框图从左到右的配置, 518386087b7a906d11.png
 楼主| 发给她更好fh 发表于 2021-4-27 15:06 | 显示全部楼层
STM32还提供了一个时钟监视系统(CSS),用于监视高速外部时钟(HSE)的工作状态。倘若HSE失效,会自动切换(高速内部时钟)HSI作为系统时钟的输入,保证系统的正常运行。
jcky001 发表于 2021-4-27 15:08 | 显示全部楼层
楼主太厉害了,一遍**用了三页
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部