STM32 时钟总结
生活随笔
收集整理的這篇文章主要介紹了
STM32 时钟总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
STM32 時鐘源
- HSI是高速內部時鐘,RC振蕩器,頻率為8MHz,精度不高。
- HSE是高速外部時鐘,可以由有源晶振或者無源晶振提供,頻率從 4-26MHZ不等。當使用有源晶振時,時鐘從 OSC_IN 引腳進入, OSC_OUT 引腳懸空,當選用無源晶振時,時鐘從 OSC_IN 和 OSC_OUT 進入,并且要配諧振電容LSI是低速內部時鐘,RC振蕩器,頻率為40kHz,提供低功耗時鐘。
- LSI是低速內部時鐘,RC振蕩器,頻率為40kHz
- LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。
- PLL為鎖相環倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,可是其輸出頻率最大不得超過72MHz。
系統時鐘源有3個:HSI振蕩器時鐘,HSE振蕩器時鐘,PLL時鐘。
AHB總線時鐘HCLK:系統時鐘 SYSCLK 經過 AHB 預分頻器分頻之后得到時鐘叫 APB 總線時鐘,即 HCLK,分頻因子可以是:[1,2,4,8,16,64,128,256,512], 具體的由時鐘配置寄存器RCC_CFGR的HPRE 位設置。
APB2 總線時鐘HCLK2:APB2總線時鐘PCLK2由HCLK經過高速APB2預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置寄存器 RCC_CFGR 的PPRE2位設置。 HCLK2屬于高速的總線時鐘,片上高速的外設就掛載到這條總線上,比如全部的GPIO、 USART1、SPI1等。
APB1 總線時鐘HCLK:APB1總線時鐘PCLK1由HCLK 經過低速APB預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置寄存器RCC_CFGR的PPRE1位設置。HCLK1屬于低速的總線時鐘,最高為 45M,片上低速的外設就掛載到這條總線上,比如USART2/3/4/5、SPI2/3、I2C1/2 等。
STM32軟件固件庫的程序中對RCC的配置函數(使用外部8MHz晶振)
void RCC_Configuration(void) {RCC_DeInit();/*將外設RCC寄存器重設為缺省值*//*設置外部高速晶振(HSE)*/RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打開(ON)HSEStartUpStatus = RCC_WaitForHSEStartUp();/*等待HSE起振*/if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振穩定且就緒{/*設置AHB時鐘(HCLK)*/ RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB時鐘=系統時鐘/* 設置高速AHB時鐘(PCLK2)*/ RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2時鐘= HCLK/*設置低速AHB時鐘(PCLK1)*/ RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1時鐘= HCLK / 2/*設置FLASH存儲器延時時鐘周期數*/FLASH_SetLatency(FLASH_Latency_2); //FLASH_Latency_2 2延時周期/*選擇FLASH預取指緩存的模式*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 預取指緩存使能/*設置PLL時鐘源及倍頻系數*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // PLL的輸入時鐘= HSE時鐘頻率;RCC_PLLMul_9——PLL輸入時鐘x 9RCC_PLLCmd(ENABLE); /*使能PLL *//*檢查指定的RCC標志位(PLL準備好標志)設置與否*/ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*設置系統時鐘(SYSCLK)*///RCC_SYSCLKSource_PLLCLK——選擇PLL作為系統時鐘/* PLL返回用作系統時鐘的時鐘源*/while(RCC_GetSYSCLKSource() != 0x08);//0x08:PLL作為系統時鐘}/*使能或者失能APB2外設時鐘*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); //RCC_APB2Periph_GPIOA GPIOA時鐘 //RCC_APB2Periph_GPIOB GPIOB時鐘//RCC_APB2Periph_GPIOC GPIOC時鐘 //RCC_APB2Periph_GPIOD GPIOD時鐘 }?
總結
以上是生活随笔為你收集整理的STM32 时钟总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国电信无线网服务器,中兴3G无线上网卡
- 下一篇: Go开发 之 Go的 9个 基本命令