STM32L--Reset and clock control(RCC)

STM32L-Reset and clock control(RCC)


1. Reset

有三種復位的方法:系統復位、電源復位、RTC domain復位。

(1)系統復位
系統復位時會將所有寄存器置爲復位狀態(除了RTC、RTC備份寄存器和控制/狀態寄存器、RCC_CSR)。
當以下事件發生時將會產生系統復位:
    • NRST端口爲低電平(外部復位)
    • 窗口看門狗 end-of-count時(WWDG 復位)
    • 獨立看門狗 end-of-count時(IWDG復位)
    • 軟件復位(SW復位)
    • 低功耗管理復位
    • 選項字節加載復位
    • 退出待機模式時
可以通過檢測復位標誌位(control/status register,RCC_CSR)判斷爲哪一個復位源。
a)軟件復位
配置Cortex-M3應用中斷的SYSERSETREQ位和復位控制寄存器才能觸發軟件復位發生。
b)低功耗管理復位
有兩種方法可以產生低功耗管理復位:
    • 當進入待機模式時產生的復位:需要復位選項字節裏的nRST_STDBY位才能使其生效。在該情況下,無論進入待機模式的時序是否成功執行,設備將以復位代替進入待機模式。
    • 當進入停止模式時產生的復位:需要復位選項字節裏的nRST_STOP位才能使其生效。在該情況下,無論進入停止模式的時序是否成功執行,設備將以復位代替進入停止模式。
c)選項字節加載復位
當FLASH_PECR寄存器中的OBL_LAUNCH位被置位時,選項字節加載復位纔會產生。該位用於啓動軟件選項字節加載。

(2)電源復位
當以下事件發生時將會產生電源復位:
    • POR/PDR復位
    • BOR復位
電源復位會將所有寄存器包括RTC domain的值重置爲復位狀態。
這些均會表現在NRST端口上,並且在delay phase期間會保持低電平。復位服務的routine vector固定在了內存映射0X0000_0004地址。
系統復位信號會在NRST端口中輸出。對於每個內部復位源,Pulse generator均會產生至少20us的延時。在外部復位的情況下,當NRST爲低電平時會產生復位脈衝。




(3)RTC及備份寄存器復位
當以下事件發生時,RTC外設、RTC時鐘、備份寄存器將會復位
    • 軟件復位(設置RCC_CSR RTCRST位)
    • 電源復位(BOR/POR/PDR)

2.時鐘
以下四種時鐘源可用於驅動系統時鐘(SYSCLK):
    • HSI(high-speed internal)oscillator clock
    • HSE (high-speed external)oscillator clock
    • PLL clock
    • MSI(multispeed internal)oscillator clock(當復位或者從停止、待機模式中喚醒時,系統時鐘爲MSI)
設備中還有以下兩種時鐘源:
    • 37kHz low speed internal RC(LSI RC):驅動獨立看門狗,RTC(用於從停止/待機模式中自動喚醒、可選)
    • 32.768kHz low speed external crystal(LSE crystal):real-time clock(RTCCLK、可選)
每一個時鐘源可以單獨的關閉和打開,從而減少功耗。
多個分頻器可用於配置AHB、the high speed APB(APB2)、the low speed APB(APB1)domains。AHB、APB1、APB2最高頻道爲32MHz(與工作電壓範圍相關)。
所以的外設時鐘均來源於SYSCLK,除了以下外設時鐘:
    • 48MHz clock USB 和 SDIO時鐘來源於PLL VCO時鐘
    • ADC時鐘來源於HSI時鐘,根據具體情況可以使用分頻器進行1、2或4分頻以使用合適的頻率
    • RTC/LCD時鐘來源於LSE,LSI或1MHz HSE_RTC(HSE divided by a programmable prescaler)
    • IWDG時鐘來源於LSI
SYSCLK頻道必需大於等於RTC/LCD時鐘頻道。
SysTick時鐘來源於AHB時鐘(8分頻)。


硬件會自動調整定時器時鐘頻率,有以下兩種情況:
    • 如果APB分頻器爲1,定時器時鐘頻道被設置爲與APB一致
    • 否則,被設置爲2倍於APB時鐘

(1)HSE
HSE可以遊以下時鐘源產生:
    • HSE 外部晶振
    • HSE 外部時鐘源
振盪器及負載電容需要放置在儘可能靠近引腳的地方以減少輸出變形及啓動穩定時間。電容值需要根據所選擇的振盪器進行修改以匹配。



a)External source(HSE bypass)
在該模式下,需要提供一個外部時鐘源,其頻道可達32MHz。通過設置時鐘控制寄存器的HSEBYP和HSEON位即可選擇該模式。外部時鐘源(方波、正玄波、三角波)以50%的佔空比驅動OSC_IN引腳。

b)External crystal/ceramic resonator(HSE crystal)
1~24MHz的外部振盪器可以爲系統提供高精度的時鐘。

硬件連接如Figure 13所示。
RCC_CR寄存器中的HSERDY標示了HSE振盪器是否已經穩定。在啓動時,只有該位爲有效時,HSE纔是生效的。如果配置了RCC_CR相應的位,可以產生相應的中斷。
通過RCC_CR寄存器中的HSEON可以關閉或開啓HSE。

(2)HSI

HSI時鐘由內部16MHz RC振盪器產生。該時鐘可直接被用爲系統時鐘或者PLL輸入。
HSI RC振盪器具有在低成本(無需外部元器件)情況下提供時鐘源,而且比HSE具有更快的啓動時間,但是其精度沒有外部振盪器高(即使進行了調整)。
a)Calibration
RC振盪器的頻率會於其他芯片上的不同(與不同的製作過程有關)。這就是爲什麼每個芯片在出廠前調整到只有1%的誤差(在固定的溫度TA:25攝氏度)。
復位後,出廠的調整值存放在了內部時鐘源調整寄存器RCC_ICSCR的HSICAL[7:0]。
如果應用與電壓或者溫度變化的相關,這也有可能同時影響到了RC振盪器的頻率。你可以在程序中通過修改HSIRTIM[4:0](RCC_ICSCR寄存器中)修改HSI頻率。

RCC_CR寄存器中的HSIRDY標示了HSI振盪器是否已經穩定。在啓動時,只有該位有效時,HSI纔是生效的。
通過RCC_CR寄存器中的HSION可以關閉或開啓HSI。

(3)MSI

MSI時鐘源由內部RC振盪器產生。可通過RCC_ICSCR寄存器中的MSIRANGE[2:0]來調整其頻率。七種頻率是有效的:65.536kHz,131.072kHz,262.144kHz,524.288kHz,1.048MHz,2.097MHz(默認值)和4.194MHz。
復位重啓之後或者從停止、待機低功耗模式中喚醒時,MSI時鐘源用於系統時鐘,且MSI頻率爲其默認值。從停止模式中喚醒後MSI的頻道不會被改變。
MSI RC振盪器具有在低成本(無需外部元器件)情況下提供時鐘源。且被使用爲低功耗模式的喚醒時鐘以減少功耗和喚醒時間。
RCC_CR寄存器中的MSIRDY標示了MSI RC振盪器是否已經穩定。在啓動時,只有該位有效時,MSI纔是生效的。
如果HSE 振盪器失效時,可自動切換使用該時鐘源(CSS)。
a)Calibration
MSI RC振盪器的頻率會於其他芯片上的不同(與不同的製作過程有關)。這就是爲什麼每個芯片在出廠前調整到只有1%的誤差(在固定的溫度TA:25攝氏度)。
復位後,出廠的調整至存放在了RCC_ICSCR的MSICAL[7:0]。如果應用與電壓或者溫度變化的相關,這也有可能同時影響到了RC振盪器的頻率。你可以在程序中通過修改MSIRTIM[7:0](RCC_ICSCR寄存器中)修改HSI頻率。

(4)PLL

內部PLL可由HSI RC或者HSE振盪器驅動。其可用於系統時鐘和爲USB外設提供48MHz時鐘.

PLL輸入頻率範圍必需爲:2~24MH

目標頻率是通過multiplication factor和output division(嵌入在PLL中)進行配置:
    • 如果應用中使用了USB或者SDIO接口,PLL VCO時鐘(由PLL multiplication factor決定)必需被編程爲輸出96MHz頻率。這被要求爲USB或者SDIO提供48MHz的時鐘(SDIOCLK or USBCLK=PLLVCO/2)
    • 系統時鐘由PLL VCO分頻得到
Note:
1. 
應用程序必需正確的設置PLL multiplication factor以避免超出以下情況:
PLLVCO=96MHz range1
PLLVCO=48MHz range2
24MHz range3
另外必需正確設置output division 避免SYSCL大於32MHz。

2.
PLL 最小輸入頻率爲2MHz(當使用HSE爲PLL的時鐘源時)。必需在使能PLL前進行PLL的配置。一旦PLL使能後,則無法修改其參數。
爲了修改PLL配置,步驟如下:
1. 設置PLLON爲0,關閉PLL
2. 等待PLLRDY位被清除,PLL則已停止
3. 修改所需要的配置
4. 設置PLLON爲1,開啓PLL

(5)LSE

LSE振盪器是32.768kHz低速外部晶振或者陶瓷振盪器。其優勢在於提供低功耗且高精度的時鐘源給RTC時鐘/日曆或其他定時功能。
通過RCC_CSR寄存器中的LSEON位可關閉或開啓LSE。
RCC_CSR寄存器中的LSERDY標示了LSE是否已經穩定。在啓動時,只有該位有效時,LSE纔是生效的。如果配置RCC_CIR寄存器中的對應位可產生相應的中斷。
a)External source(LSE bypass)
在該模式下,需要提供一個外部時鐘源。其頻率可高達1MHz。通過配置RCC_CR中的LSEBYP和LSEON即可開啓該模式。外部時鐘源以50%的佔空比驅動OSC32_IN引腳

(6)LSI

LSI RC振盪器作爲低功耗時鐘源,在停止或者待機模式下爲IWDG提供時鐘,該時鐘頻道約37kHz。
通過RCC_CRT寄存器中的LSION位可關閉或開啓LSI。
RCC_CSR寄存器中的LSIRDY標示了LSI是否已經穩定。在啓動是,只有該位有效時,LSI纔是生效的。
a)LSI measurement
The frequency dispersion of the LSI oscillator can be measured to have accurate RTC time base and/or IWDG timeout(when LSI is used as clock source for these peripherals)with an acceptable accuracy.

(7)系統時鐘選擇(SYSCLK)

四種不同的時鐘源可用於系統時鐘(SYSCLK):
    • HSI
    • HSE
    • PLL
    • MSI(default after reset)
如果時鐘源正在用作系統時鐘或者通過PLL用作系統時鐘,此時是無法停止該時鐘源的。
只有當目標時鐘源準備好時(在啓動延時後或者PLL鎖定後處於穩定狀態)纔可從一個時鐘源切換到另外一個。如果一個還沒有準備好的時鐘源被選中進行切換,只有當時鍾源穩定後纔會進行該時鐘源切換。RCC_CR寄存器中的狀態位會標示那些時鐘源準備好了和當前那個時鐘源用於系統時鐘

(8)System clock source frequency versus voltage range

以下表格展示了在不同的電壓範圍內可使用的時鐘頻率範圍:



(9)時鐘安全系統(CSS)

時鐘安全系統可以通過軟件激活。在該情況下,當HSE振盪器穩定後,時鐘檢測器也是使能的,並且當振盪器停止後,時鐘檢測器也是失效的。
如果檢測到了HSE失效了,該振盪器會自動失效,會產生一箇中斷(CSSI)告警其失效以允許MCU做出補救措施。CSSI連接到了Cortex-M3 NMI exception vector。
Note:當CSS使能且HSE失效時,CSS中斷會發生和自動產生一個NMI。NMI會被不確定的執行除非CSS中斷pending位被清除。總而言之,在NMI ISR中必需設置RCC_CIR寄存器中的CSSC以清除CSS中斷。
如果HSE被使用爲系統時鐘,失效檢測會引發一個系統時鐘切換動作,系統時鐘會切換到MSI中,且HSE會失效。如果HSE作爲PLL的輸入,且PLL用於系統時鐘,當發生失效檢測時,PLL也是無效的。

(10)LSE的時鐘安全系統

In hith density and medium+ devices,通過配置RCC_CSR寄存器的LSECSSON可以激活LSE上的CSS。該位可由硬件復位或者RTC軟件復位,或者檢測到LSE失效之後會被複位。LSECSSON只有當LSE和LSI被使能且生效時才能被設置,和當RTC時鐘被選中之後。
LSE上的CSS可在所有模式中運行:run、sleep、stop和standby、
如果檢測到了外部32kHZ振盪器失效時,LSE時鐘不再爲RTC提供時鐘源,且沒有任何寄存器的硬件變化。
In standby mode a wakeup is generated. In other modes an interrupt can be sent to wake-up the software.
The software MUST then disable the LSECSSON bit,stop the defective 32kHz oscillator(disabling LSEON),and can change the RTC clock source(no clock or LSI or HSE,with RTCSEL),or take ant required action to secure the application.

(11)RTC和LCD時鐘

RTC和LCD有着同樣的時鐘源:LSE,LSI,HSE 1MHz clock(HSE divided by a programmable prescaler),通過設置RCC_CSR寄存器中的RTCSEL[1:0]和RCC_CR寄存器中的RTCPRE[1:0]來選擇對應的時鐘源。
一旦選擇了RTC和LCD的時鐘源,只有通過設置RCC_CSR寄存器中的RTCRST來修改選擇或者通過一個POR。
如果LSE/LSI用於RTC時鐘源,RTC在停止和待機低功耗模式下可繼續工作,還有可以用作喚醒信號。而已,如果使用HSE作爲RTC時鐘源時,RTC無法在停止和待機低功耗模式下工作。而無論是使用LSE/LSI作爲RTC時鐘源,LCD均可在停止和待機低功耗模式下工作。
Note:當APB1時鐘頻率小於7倍的RTC時鐘頻率(7*RTCLCK),必需讀取calendar time和date寄存器兩次纔可以正確讀取數據。如果第二次讀取的數據與第一次讀取的數據一致,那麼數據確保是正確的,否則需要進行第三次讀取。

(12)看門狗時鐘

IDG可以通過硬件選項位啓動或者軟件訪問啓動,此時LSI會被強制生效且無法使其失效。After the LSI oscillator temporization,the clock is provided to the IWDG.

(13)時鐘輸出功能

MCO(microcontroller clock output)功能允許時鐘通過一個可配置的分頻器後輸出到MCO pin(PA8)。相關的GPIO端口需要配置爲alternate function mode。
如下時鐘源可被選中爲MCO時鐘:
    • SYSCLK
    • HSI
    • MSI
    • HSE
    • PLL
    • LSI
    • LSE
通過RCC_CFGR寄存器的MCOSEL[2:0]配置所選擇的時鐘源。

(14)TIM9/10/11 內部/外部時鐘管理

通過TIM9/TIM10/TIM11 channel1 輸入捕獲可以間接的測量時鐘源頻率。



每個定時器有一個輸入多路選擇器用於選擇哪個I/O或者內部時鐘源觸發輸入捕獲。通過配置TIMx_OR寄存器的TI1_RMP[1:0]可修改該選擇。
對於TIM9和TIM10,連接LSE到channel1的輸入端的主要目的是爲了精確的測量HSI和MSI系統時鐘(HSI和MSI應該被選擇爲系統時鐘源)。HSI時鐘在LSE信號間的計數爲內部時鐘週期提供了一個量度標準。利用LSE振盪器的高精度,可以確定在同樣條件下的內部時鐘頻率,從而可以根據電壓或者溫度的變化對時鐘源進行調整。
MSI和HSI振盪器可進行精度調整就是爲了該目的。
基本觀點包括了提供一個相關的測量(eg:HSI/LSE比):測量的精度與兩個時鐘源之比相關,HSI/LSE越高,有更好的測量。
當時當MSI時鐘較低時(typical below 1MHz),無法提供一個足夠準確的解決方案。在該情況下,建議進行一下操作:
    • accumulate the results of several captures in a row
    • use the timer's input capture prescaler(up to 1 capture every 8 periods)
    • use the RTC_OUT signal at 512Hz(when the RTC is clocked by the LSE)as the input for the channel1 input capture.This improves the measurement precision.
TIM10同樣可以用於測量LSI:對於沒有晶振的應用是十分有用的。超低功耗LSI振盪器在製作過程中有很大的誤差:通過測量其精度作爲HSI時鐘源的一個功能,憑HSI的精度這是可以確定其頻率的。
最後TIM11有兩個其他的源。TIM11在無晶振的應用中使用MSI就像TIM10使用LSI一樣。HSE_RTC的頻率相對較高(1MHz),因此相關的頻率測量不是十分精確,所以其主要目的是爲了粗劣的測量外部晶振的頻率。This is useful for instance to meet the requirements of the IEC60730/IEC61335 standards,which requires to be able to determine harmonic or subharmonic frequencies(-50/+100% deviations).

(15)TIM9/10/11 時鐘依賴系統時鐘源


相當一部分應用使用32.768kHz時鐘作爲RTC的基本時鐘,這樣做可以讓該時鐘源完全獨立於系統時鐘。這允許調度任務不需要顧及系統的狀態(stopped、executing at low medium or full speed)
爲了達到該目的,LSE時鐘在內部重定向到了三個定時器的ETR inputs,這用於額外的時鐘源(as show in Figure 15)。This gives up three independent time bases(using the auto-reload feature)with 1 or 2 compare additional channels for fractional events. For instance,the TIM9's auto-reload interrupt can be programmed for a 1 second tick interrupt with an additional interrupt occuring 250ms after the main tick.
Note:
In this configuration,make sure that you have at least a ratio of 2 between the external clock(LSE) and the APB clock. If the application uses an APB clock frequency lower than twice the LSE clock frequency(typically LSE=32.768kHz,so twice LSE=65.536kHz),it is mandatory to use the external trigger prescaler feature of the timer:it can divide the ETR clock by up to 8.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章