這幾天寫了一段測試代碼,跑在LPC812上面。
很吃驚的發現CPU速度為1M 時鍾 串口為12M時鍾 原來常測試的是STM32的 一般72M 分了再分。。。。
搞了半夜才弄明白,寫在此處備忘。
LPC812
PLL輸出為MAINCLK
MAINCLK分頻得到 CPU 內存等用的時鍾
MAINCLK分頻得到 USART等外設用的時鍾
STM32
PLL輸出為SYSCLK SYSCLK分頻得到AHB時鍾
AHB時鍾不分頻 直接供CPU 文檔中叫FCLK
AHB時鍾不分頻直接供內存 FLASH等 文檔中叫HCLK
AHB可APB1分頻供APB1外設 文檔中是PCLK1
AHB可APB2分頻供APB2外設 文檔中是PCLK2
附圖
同時回憶一下STM32。。手頭上隨便找了STM32L051的手冊吧。看了下,STM32比LPC812少了個CPU時鍾的分頻器。所以CPU時鍾就是系統時鍾。 外設必然低於CPU速度。
最后說一下SYSTICK 該時鍾分頻與否的時鍾基准是CPU的時鍾。雖然叫法不一樣。但這個都是CPU的實際時鍾為基准。
再在網上摘一段STM32的說明,以作備忘。
系統時鍾SYSCLK最大頻率為72MHz,它是供STM32中絕大部分部件工作的時鍾源。系統時鍾可由PLL、HSI或者HSE提供輸出,並且它通過AHB分頻器分頻后送給各模塊使用,AHB分頻器可選擇1、2、4、8、16、64、128、256、512分頻。其中AHB分頻器輸出的時鍾送給5大模塊使用:①、送給AHB總線、內核、內存和DMA使用的HCLK時鍾。
②、分頻后送給STM32芯片的系統定時器時鍾(Systick=Sysclk/8=9Mhz)
③、直接送給Cortex的自由運行時鍾(free running clock)FCLK。【ARMJISHU注:FCLK 為處理器的自由振盪的處理器時鍾,用來采樣中斷和為調試模塊計時。在處理器休眠時,通過FCLK 保證可以采樣到中斷和跟蹤休眠事件。 Cortex-M3內核的“自由運行時鍾(free running clock)”FCLK。“自由”表現在它不來自系統時鍾HCLK,因此在系統時鍾停止時FCLK 也繼續運行。FCLK和HCLK 互相同步。FCLK 是一個自由振盪的HCLK。FCLK 和HCLK 應該互相平衡,保證進入Cortex-M3 時的延遲相同。】④、送給APB1分頻器。APB1分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB1外設使用(PCLK1,最大頻率36MHz),另一路送給定時器(Timer)2、3、4倍頻器使用。該倍頻器可選擇1或者2倍頻,時鍾輸出供定時器2、3、4使用。
⑤、送給APB2分頻器。APB2分頻器可選擇1、2、4、8、16分頻, 其輸出一路供APB2外設使用(PCLK2,最大頻率72MHz),另一路送給定時器(Timer)1倍頻器使用。該倍頻器可選擇1或者2倍頻,時鍾輸出 供定時器1使用。另外,APB2分頻器還有一路輸出供ADC分頻器使用,分頻后送給ADC模塊使用。ADC分頻器可選擇為2、4、6、8分頻。
以上提到3種時鍾Fclk、Hclk和Pclk,簡單解釋如下:Fclk為供給CPU內核的時鍾信號,我們所說的cpu主頻為XXXXMHz,就是指的這個時鍾信號,相應的,1/Fclk即為cpu時鍾周期;Hclk為優秀的高性能總線(AHB bus peripherals)供給時鍾信號(AHB為advanced high-performance bus);HCLK :AHB總線時鍾,由系統時鍾SYSCLK 分頻得到,一般不分頻,等於系統時鍾,HCLK是高速外設時鍾,是給外部設備的,比如內存,flash。Pclk為優秀的高性能外設總線(APB bus peripherals)供給時鍾信號(其中APB為advanced peripherals bus)。
在以上的時鍾輸出中,有很多是帶使能控制的,例如AHB總線時鍾、內核時鍾、各種APB1外設、APB2外設等等。當需要使用某模塊時,記得一定要先使能對應的時鍾。