天天看點

[CortexM0--stm32f0308]clock介紹

    簡要描述:reset是IC活動的第一步。類似于生命,reset賦予生物生命,開始生命的起點(不過IC還是IC,可以不斷reset,重生……)。生命要繼續,最基本的特征,就是心跳正常。clock就是IC的心跳,是IC活動階段所有事務處理正常進行的基本保證。

    ​時鐘源簡寫:

    HSI:High Speed Internal,高速内部時鐘,RC振蕩器。HSE:High Speed External,高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源。LSI:Low Speed Internal,低速内部時鐘,RC振蕩器,頻率為40kHz。LSE:Low SpeedExternal,低速外部時鐘,接頻率為32.768kHz的石英晶體。PLL:​鎖相環倍頻輸出。

    STM32F030xx時鐘架構:

    該架構應當對大部分STM的cortex mo的IC都适用。​

[CortexM0--stm32f0308]clock介紹

STM32F030xx時鐘架構

​    除了上面提到的5個時鐘源外,stm32f030xx還有一個HSI14 RC時鐘源,可以單獨用來給ADC使用。沒有特别說明的peripheral一般都是用的PCLK,這裡根據具體的code将需要使用AHB/APB使能的情況簡單列出:

    用AHB作時鐘源:GPIOA-F, TS, CRC, FLITF, SRAM, DMA1。

    用APB1做時鐘源:TIM2, TIM3, TIM6, TIM14, WWDG, SPI2, USART2, I2C1, I2C2, PWR, DAC, CEC。

    用APB2做時鐘源:SYSCFG, ADC1, TIM1, SPI1, USART1, TIM15, TIM16, TIM17, DBGMCU。

    時鐘的使用:

    ​HSE:範圍在4~32MHz之間的外部時鐘源,可以外接HSE crystal和HSE bypass的方式。對于HSE crystal方式,OSC_IN和OSC_OUT都要占用,而HSE bypass隻要占用OSC_IN,另外一個可配置為GPIO使用。在啟動時,HSE如果被使能,還會有一個HSERDY bit用來标示HSE是否已穩定,并可配置在穩定時産生一個中斷。HSE的CSS用來監視時鐘,當HSE失效時會啟動HSI。

    HSI:HSI是内部的8 MHz RC oscillator産生,其啟動比HSE快,而且要節約成本一些,因為沒有額外器件,不過HSI需要标定,因為其精度不如HSE。與HSE類似,HSI也有HSERDY bit用來标示HSI是否已穩定​。

    PLL:輸出範圍在16~48MHz。使能PLL前必須要将輸入時鐘,分頻和倍頻參數都設定好。要修改PLL配置要按照如下的步驟:(1)PLLON置零禁止PLL;(2)等待到PLLRDY被清掉,這時才說明PLL真正停止;(3)設定PLL參數;(4)PLLON置1使能PLL。​

    LSE:32.768KHz,給RTC提供時鐘源。類似于HSE的使用,不過時鐘頻率低很多。有對應的LSERDY和LSEON等控制bit。

    LSI:内部RC時鐘,能在Stop和Standby模式下工作,時鐘範圍在40KHz附近(30KHz到60KHz之間)。​

    低功耗管理:stm32f030xx低功耗模式有三種,Stop mode, Standby mode, deep sleep mode。

    ​Stop mode和Standby mode會将所有MCU時鐘關閉(包括PLL, HSI, HSI14, HSE)。deep sleep mode的進入要等到APB相關操作完成才會延遲進入。

    使用示例:通過RCC寄存器配置Clock的代碼stm在system_stm32f0xx.c中提供,涉及的函數為SystemInit和SystemCoreClockUpdate。

    在reset後,cortex m0 core預設使用8M HSI作為系統時鐘源,接着會在SystemInit()函數中配置要使用的系統時鐘。因為使用的stm32f0308-discovery闆子沒有外接晶振,是以隻能使用HSI作為系統時鐘源了。

    每次HCLK改變時,都要調用​SystemCoreClockUpdate函數。

繼續閱讀