STM32補充基礎知識1:時鍾和總線(RCC、AHB、APB)


一.時鍾

1.概述

  • 分類:HSI、HSE、LSE、LSI四種
  • 作用:一般用於系統時鍾,實時時鍾(RTC)、系統時鍾以及驅動看門狗等
  • 補充:時鍾速度與總線傳輸息息相關,時鍾控制總線中數據存取速度以及CPU計算速度

2.時鍾控制相關函數(7類)

  • 時鍾使能
  • 時鍾源
  • 分頻系數
  • 外設時鍾使能
  • 外設時鍾配置
  • 狀態參數獲取
  • 中斷函數

注:RCC(Reset and clock control)主要用於復位和時鍾控制功能

3.相關寄存器

(1)RCC結構體

 4.程序編寫

  • 時鍾設置
  • 設備時鍾設置
  • 注意:程序中第一步就要設置好時鍾,不然外設不起作用

 1 void RCC_Configuration(void){ //RCC時鍾的設置  
 2     ErrorStatus HSEStartUpStatus;   
 3     RCC_DeInit();              /* RCC system reset(for debug purpose) RCC寄存器恢復初始化值*/   
 4     RCC_HSEConfig(RCC_HSE_ON); /* Enable HSE 使能外部高速晶振*/   
 5     HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* Wait till HSE is ready 等待外部高速晶振使能完成*/   
 6     if(HSEStartUpStatus == SUCCESS){   
 7         /*設置PLL時鍾源及倍頻系數*/   
 8         RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //RCC_PLLMul_x(枚舉2~16)是倍頻值。當HSE=8MHZ,RCC_PLLMul_9時PLLCLK=72MHZ   
 9         /*設置AHB時鍾(HCLK)*/   
10         RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB時鍾 = 系統時鍾(SYSCLK) = 72MHZ(外部晶振8HMZ)   
11         /*注意此處的設置,如果使用SYSTICK做延時程序,此時SYSTICK(Cortex System timer)=HCLK/8=9MHZ*/   
12         RCC_PCLK1Config(RCC_HCLK_Div2); //設置低速AHB時鍾(PCLK1),RCC_HCLK_Div2——APB1時鍾 = HCLK/2 = 36MHZ(外部晶振8HMZ)   
13         RCC_PCLK2Config(RCC_HCLK_Div1); //設置高速AHB時鍾(PCLK2),RCC_HCLK_Div1——APB2時鍾 = HCLK = 72MHZ(外部晶振8HMZ)   
14         /*注:AHB主要負責外部存儲器時鍾。APB2負責AD,I/O,高級TIM,串口1。APB1負責DA,USB,SPI,I2C,CAN,串口2,3,4,5,普通TIM */  
15         FLASH_SetLatency(FLASH_Latency_2); //設置FLASH存儲器延時時鍾周期數   
16         /*FLASH時序延遲幾個周期,等待總線同步操作。   
17         推薦按照單片機系統運行頻率:
18         0—24MHz時,取Latency_0;   
19         24—48MHz時,取Latency_1;   
20         48~72MHz時,取Latency_2*/   
21         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //選擇FLASH預取指緩存的模式,預取指緩存使能   
22         RCC_PLLCmd(ENABLE);    //使能PLL
23         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL輸出穩定   
24         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //選擇SYSCLK時鍾源為PLL
25         while(RCC_GetSYSCLKSource() != 0x08); //等待PLL成為SYSCLK時鍾源   
26     }  
27     /*開始使能程序中需要使用的外設時鍾*/   
28 //    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |   
29 //    RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); //APB2外設時鍾使能      
30 //    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //APB1外設時鍾使能  
31 //    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);   
32 //    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);        
33 //    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    
34 } 

 

二.總線

1.概述

  • 分類:AHB(Advanced High Performance Bus,高級高性能總線),APB1(Advanced Peripheral Bus,高級外圍總線),APB2共三種
  • APB1為低速總線,APB2為高速總線,APB1最高36MHZ,APB2最高72MHZ
  • 總線上掛在的設備不同:IO都在APB2上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM