欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STM32F103時鐘配置流程 [打印本頁]

作者: IdeaMing    時間: 2018-3-15 11:06
標題: STM32F103時鐘配置流程
本帖最后由 IdeaMing 于 2018-3-16 10:15 編輯

STM32F103時鐘配置流程



前言:
一般情況下單片機的時鐘配置是單片機程序中的第一步,也是很重要的一步。這時候我們需要考慮以下幾個問題。
1. 系統時鐘的時鐘源用哪個。
2. 系統時鐘頻率要多少。
3. 每個模塊的時鐘頻率要多少。
4. 如果外部時鐘出了問題,這個時候時鐘是怎么運行的。

下面就針對性的講一講STM32F103的時鐘配置。



知識點:
1. 系統復位后,HSI振蕩器被選為系統時鐘。當時鐘源被直接或通過PLL間接作為系統時鐘時,它將不能被停止。

2. STM32F103的三個可以作為系統時鐘的時鐘源,分別是HSI、HSE、PLL。而PLL的時鐘源是HSI/2(內部RC振蕩器二分頻)、HSE。

3.如果使用HSI,系統時鐘我們能達到的最大頻率是64MHz,如果使用HSE,系統時鐘最大頻率是72MHz。

4.APB時鐘有低速PCLK1和高速PCLK2;PCLK1是從HCLK二分頻得到的,最大36MHZ,根據上一條知識點如果是使用HSI,則最快是32MHz

5. PLL的設定需要在使能之前,一旦PLL使能后參數不可更改。

6.附錄是一些縮寫的英文全稱,也有一些補充的知識點。


步驟:
第一步     初始化時鐘
         不管現在SYSCLK的時鐘源是哪個,我們要更換時鐘源。先RCC_DeInit();

第二步              打開時鐘
         內部高速時鐘HSI           RCC_HSICmd(ENABLE);
         外部高速時鐘HSE          RCC_HSEConfig(RCC_HSE_ON);

第三步              等待時鐘晶振工作
         HSI            While(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);
         HSE           While(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);

第四步              設置AHB時鐘HCLK
                                                                 RCC_HCLKConfig(RCC_SYSCLK_Div1);
        分頻系數自己設定,一般都是RCC_SYSCLK_Div1即不分頻。

第五步              設置低速APB時鐘
                                                                 RCC_PCLK1Config(RCC_HCLK_Div2);

第六步              設置高速APB時鐘
                                                                 RCC_PCLK2Config(RCC_HCLK_Div1);
第七步              設置Flash預緩沖
                                                                 FLASH_SetLatency(FLASH_Latency_2);
                                              FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);          // 使能flash預緩沖
       Flash的操作也沒有總線時鐘快,所以需要總線在操作flash時稍作等待。推薦根據HCLK設置。
0-24MHz時,取FLASH_Latency_0;24-48MHz,取FLASH_Latency_1;48-72MHz時,取FLASH_Latency_2。

第八步              設置PLL                     如果不使用PLL,請略過此步驟
         HSI                                                  RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16 );
         HSE                                                 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );

第九步              打開PLL                     如果不使用PLL,請略過此步驟
                                                                 RCC_PLLCmd(ENABLE);

第十步              等待PLL工作          如果不使用PLL,請略過此步驟
                                                                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);

第十一步              設置系統時鐘
         HSI                                                  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
         HSE                                                 RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
         PLL                                                  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
第十二步         判斷是否是設置的時鐘
         HSI                                                  while(RCC_GetSYSCLKSource()!= 0x00);
         HSE                                                 while(RCC_GetSYSCLKSource()!= 0x04);
         PLL                                                  while(RCC_GetSYSCLKSource()!= 0x08);



附錄:一些縮寫的英文全稱及中文翻譯,幫助理解記憶。
IWDG       IndependentWatchdog                                   獨立看門狗

RTC           RealTime Clock                                                      實時時鐘
                   時鐘源可以是LSI,或者LSE,再或者HSE128分頻。
LSI             LowSpeed Internal                                                       內部低速時鐘
                   RC振蕩器,頻率為40kHz。供IWDG使用,還能作為RTC的時鐘源。
HSI            HighSpeed Internal                                             內部高速時鐘
                   RC振蕩器,頻率為8MHz。
HSE           HighSpeed External                                             外部高速時鐘
                   可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。

PLL          PhaseLockedLoop                                                   鎖相環倍頻輸出
                   其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,

SYSCLK     SystemColock                                                                 系統時鐘

AHB          AdvancedHigh performance Bus                   高級高性能總線
                   AHB主要用于高性能模塊(CPUDMADSP)之間的連接。

APB          Advanced PeripheralBus                                  高級外圍設備總線
                   APB主要用于外設模塊(ADCUSB、SPIUART)AHB之間的連接。

HCLK         Advanced High performance Bus Clock                 高級高性能總線時鐘
                   就是SYSCLK經過AHBPrescaler(預分頻器)后得到的AHB的時鐘。

PCLK         PeripheralBus Clock                                            外圍設備總線時鐘                  
                   PCLK有兩個,一個是低速的PCLK1,另一個是高速的PCLK2
                   PCLK1是經過APB1Prescaler后得到的APB1時鐘。
PCLK2是經過APB2 Prescaler后得到的APB2時鐘。

FCLK                   FreeRuning Clock                                                  自由運行時鐘
為供給CPU內核的時鐘信號,CPU的主頻就是指這個信號;1/FCLK就是CPU時鐘周期。
為什么叫自由運行時鐘呢?下面是別人家的講解。
ARMJISHU注:FCLK 為處理器的自由振蕩的處理器時鐘,用來采樣中斷和為調試模塊計時。在處理器休眠時,通過FCLK 保證可以采樣到中斷和跟蹤休眠事件。 Cortex-M3內核的“自由運行時鐘(free running clock)”FCLK!白杂伞北憩F在它不來自系統時鐘HCLK,因此在系統時鐘停止時FCLK也繼續運行。FCLK和HCLK 互相同步。FCLK 是一個自由振蕩的HCLK。FCLK 和HCLK 應該互相平衡,保證進入Cortex-M3 時的延遲相同。


STM32F103時鐘配置流程.pdf (394.67 KB, 下載次數: 165)




作者: IdeaMing    時間: 2018-3-16 09:06
這個時鐘配置完了之后就是端口時鐘的開關,外設總線的時鐘速度,比如SPI.
作者: IdeaMing    時間: 2018-3-16 10:16
IdeaMing 發表于 2018-3-16 09:06
這個時鐘配置完了之后就是端口時鐘的開關,外設總線的時鐘速度,比如SPI.

第二版本增加了第七步,flash的操作延時設置和flash預緩沖的設置。
作者: 51hei大小    時間: 2018-3-16 15:47
非常有用,果斷下載 先謝樓主
作者: cnc2020    時間: 2018-7-8 21:49
good job
作者: pc333    時間: 2018-7-9 17:48
贊!真的很清楚明白,小弟有個疑問,恭請樓主幫忙解惑,感謝!

小弟啟用的是外部時鐘,即HSE,前十步都與樓主一致,但在第十一、十二步,使用的是PLL對應的代碼,這個與使用HSE對應的代碼有啥區別和影響呢?再次感謝!
作者: a7727347    時間: 2018-7-9 21:20
非常感謝
作者: IdeaMing    時間: 2018-8-23 16:40
pc333 發表于 2018-7-9 17:48
贊!真的很清楚明白,小弟有個疑問,恭請樓主幫忙解惑,感謝!

小弟啟用的是外部時鐘,即HSE,前十步都 ...

HSE就是你外面接的那個晶振頻率。
作者: 一直填填    時間: 2018-11-15 13:12
厲害啊
作者: chauvet2010    時間: 2019-1-16 17:13
不錯~~
作者: wangdunyuan1    時間: 2019-6-11 20:11
非常有用
作者: kissme    時間: 2019-6-23 19:03
急需的東東,,謝謝




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1