簡要描述: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都适用。
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函數。