一.時鍾
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上