標(biāo)題: STM32F103時(shí)鐘配置流程 [打印本頁(yè)]
作者: IdeaMing 時(shí)間: 2018-3-15 11:06
標(biāo)題: STM32F103時(shí)鐘配置流程
本帖最后由 IdeaMing 于 2018-3-16 10:15 編輯
STM32F103時(shí)鐘配置流程
前言:一般情況下單片機(jī)的時(shí)鐘配置是單片機(jī)程序中的第一步,也是很重要的一步。這時(shí)候我們需要考慮以下幾個(gè)問(wèn)題。
1. 系統(tǒng)時(shí)鐘的時(shí)鐘源用哪個(gè)。
2. 系統(tǒng)時(shí)鐘頻率要多少。
3. 每個(gè)模塊的時(shí)鐘頻率要多少。
4. 如果外部時(shí)鐘出了問(wèn)題,這個(gè)時(shí)候時(shí)鐘是怎么運(yùn)行的。
下面就針對(duì)性的講一講STM32F103的時(shí)鐘配置。
知識(shí)點(diǎn):1. 系統(tǒng)復(fù)位后,HSI振蕩器被選為系統(tǒng)時(shí)鐘。當(dāng)時(shí)鐘源被直接或通過(guò)PLL間接作為系統(tǒng)時(shí)鐘時(shí),它將不能被停止。
2. STM32F103的三個(gè)可以作為系統(tǒng)時(shí)鐘的時(shí)鐘源,分別是HSI、HSE、PLL。而PLL的時(shí)鐘源是HSI/2(內(nèi)部RC振蕩器二分頻)、HSE。
3.如果使用HSI,系統(tǒng)時(shí)鐘我們能達(dá)到的最大頻率是64MHz,如果使用HSE,系統(tǒng)時(shí)鐘最大頻率是72MHz。
4.APB時(shí)鐘有低速PCLK1和高速PCLK2;PCLK1是從HCLK二分頻得到的,最大36MHZ,根據(jù)上一條知識(shí)點(diǎn)如果是使用HSI,則最快是32MHz。
5. PLL的設(shè)定需要在使能之前,一旦PLL使能后參數(shù)不可更改。
6.附錄是一些縮寫(xiě)的英文全稱(chēng),也有一些補(bǔ)充的知識(shí)點(diǎn)。
步驟:第一步 初始化時(shí)鐘
不管現(xiàn)在SYSCLK的時(shí)鐘源是哪個(gè),我們要更換時(shí)鐘源。先RCC_DeInit();
第二步 打開(kāi)時(shí)鐘
內(nèi)部高速時(shí)鐘HSI RCC_HSICmd(ENABLE);
外部高速時(shí)鐘HSE RCC_HSEConfig(RCC_HSE_ON);
第三步 等待時(shí)鐘晶振工作
HSI While(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);
HSE While(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);
第四步 設(shè)置AHB時(shí)鐘HCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
分頻系數(shù)自己設(shè)定,一般都是RCC_SYSCLK_Div1即不分頻。
第五步 設(shè)置低速APB時(shí)鐘
RCC_PCLK1Config(RCC_HCLK_Div2);
第六步 設(shè)置高速APB時(shí)鐘
RCC_PCLK2Config(RCC_HCLK_Div1);
第七步 設(shè)置Flash預(yù)緩沖
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 使能flash預(yù)緩沖
Flash的操作也沒(méi)有總線時(shí)鐘快,所以需要總線在操作flash時(shí)稍作等待。推薦根據(jù)HCLK設(shè)置。
0-24MHz時(shí),取FLASH_Latency_0;24-48MHz,取FLASH_Latency_1;48-72MHz時(shí),取FLASH_Latency_2。
第八步 設(shè)置PLL 如果不使用PLL,請(qǐng)略過(guò)此步驟
HSI RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16 );
HSE RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );
第九步 打開(kāi)PLL 如果不使用PLL,請(qǐng)略過(guò)此步驟
RCC_PLLCmd(ENABLE);
第十步 等待PLL工作 如果不使用PLL,請(qǐng)略過(guò)此步驟
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);
第十一步 設(shè)置系統(tǒng)時(shí)鐘
HSI RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
HSE RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
PLL RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
第十二步 判斷是否是設(shè)置的時(shí)鐘
HSI while(RCC_GetSYSCLKSource()!= 0x00);
HSE while(RCC_GetSYSCLKSource()!= 0x04);
PLL while(RCC_GetSYSCLKSource()!= 0x08);
附錄:一些縮寫(xiě)的英文全稱(chēng)及中文翻譯,幫助理解記憶。IWDG IndependentWatchdog 獨(dú)立看門(mén)狗
RTC RealTime Clock 實(shí)時(shí)時(shí)鐘
時(shí)鐘源可以是LSI,或者LSE,再或者HSE的128分頻。
LSI LowSpeed Internal 內(nèi)部低速時(shí)鐘
RC振蕩器,頻率為40kHz。供IWDG使用,還能作為RTC的時(shí)鐘源。
HSI HighSpeed Internal 內(nèi)部高速時(shí)鐘
RC振蕩器,頻率為8MHz。
HSE HighSpeed External 外部高速時(shí)鐘
可接石英/陶瓷諧振器,或者接外部時(shí)鐘源,頻率范圍為4MHz~16MHz。
PLL PhaseLockedLoop 鎖相環(huán)倍頻輸出
其時(shí)鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,
SYSCLK SystemColock 系統(tǒng)時(shí)鐘
AHB AdvancedHigh performance Bus 高級(jí)高性能總線
AHB主要用于高性能模塊(如CPU、DMA和DSP等)之間的連接。
APB Advanced PeripheralBus 高級(jí)外圍設(shè)備總線
APB主要用于外設(shè)模塊(如ADC、USB、SPI、UART等)與AHB之間的連接。
HCLK Advanced High performance Bus Clock 高級(jí)高性能總線時(shí)鐘
就是SYSCLK經(jīng)過(guò)AHBPrescaler(預(yù)分頻器)后得到的AHB的時(shí)鐘。
PCLK PeripheralBus Clock 外圍設(shè)備總線時(shí)鐘
PCLK有兩個(gè),一個(gè)是低速的PCLK1,另一個(gè)是高速的PCLK2。
PCLK1是經(jīng)過(guò)APB1Prescaler后得到的APB1時(shí)鐘。
PCLK2是經(jīng)過(guò)APB2 Prescaler后得到的APB2時(shí)鐘。
FCLK FreeRuning Clock 自由運(yùn)行時(shí)鐘
為供給CPU內(nèi)核的時(shí)鐘信號(hào),CPU的主頻就是指這個(gè)信號(hào);1/FCLK就是CPU時(shí)鐘周期。
為什么叫自由運(yùn)行時(shí)鐘呢?下面是別人家的講解。
ARMJISHU注:FCLK 為處理器的自由振蕩的處理器時(shí)鐘,用來(lái)采樣中斷和為調(diào)試模塊計(jì)時(shí)。在處理器休眠時(shí),通過(guò)FCLK 保證可以采樣到中斷和跟蹤休眠事件。 Cortex-M3內(nèi)核的“自由運(yùn)行時(shí)鐘(free running clock)”FCLK!白杂伞北憩F(xiàn)在它不來(lái)自系統(tǒng)時(shí)鐘HCLK,因此在系統(tǒng)時(shí)鐘停止時(shí)FCLK也繼續(xù)運(yùn)行。FCLK和HCLK 互相同步。FCLK 是一個(gè)自由振蕩的HCLK。FCLK 和HCLK 應(yīng)該互相平衡,保證進(jìn)入Cortex-M3 時(shí)的延遲相同。
STM32F103時(shí)鐘配置流程.pdf
(394.67 KB, 下載次數(shù): 165)
2018-3-16 10:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: IdeaMing 時(shí)間: 2018-3-16 09:06
這個(gè)時(shí)鐘配置完了之后就是端口時(shí)鐘的開(kāi)關(guān),外設(shè)總線的時(shí)鐘速度,比如SPI.
作者: IdeaMing 時(shí)間: 2018-3-16 10:16
第二版本增加了第七步,flash的操作延時(shí)設(shè)置和flash預(yù)緩沖的設(shè)置。
作者: 51hei大小 時(shí)間: 2018-3-16 15:47
非常有用,果斷下載 先謝樓主
作者: cnc2020 時(shí)間: 2018-7-8 21:49
good job
作者: pc333 時(shí)間: 2018-7-9 17:48
贊!真的很清楚明白,小弟有個(gè)疑問(wèn),恭請(qǐng)樓主幫忙解惑,感謝!
小弟啟用的是外部時(shí)鐘,即HSE,前十步都與樓主一致,但在第十一、十二步,使用的是PLL對(duì)應(yīng)的代碼,這個(gè)與使用HSE對(duì)應(yīng)的代碼有啥區(qū)別和影響呢?再次感謝!
作者: a7727347 時(shí)間: 2018-7-9 21:20
非常感謝
作者: IdeaMing 時(shí)間: 2018-8-23 16:40
HSE就是你外面接的那個(gè)晶振頻率。
作者: 一直填填 時(shí)間: 2018-11-15 13:12
厲害啊


作者: chauvet2010 時(shí)間: 2019-1-16 17:13
不錯(cuò)~~
作者: wangdunyuan1 時(shí)間: 2019-6-11 20:11
非常有用
作者: kissme 時(shí)間: 2019-6-23 19:03
急需的東東,,謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |