STM32的時鐘安全系統(CSS)系統

原因

   在實際應用中,經常出現由於晶體振盪器在運行中失去 作用,造成微處理器的時鐘源丟失,從而出現死機的現象,導致系統出錯。嚴重時,由於系統的死機造成監控失效, 導致無法挽回的損失!

目的 

    STM32作爲一個可靠穩定的微處理器,但是不能排除由於某些外界特殊因素可能造成STM32的外部振盪器失效,所以在芯片中需要一種包含機制能夠在STM32運行時,一旦外部晶體振盪器(HSE) 失效,切換STM32的系統時鐘源到一個穩定的時鐘源,以保證STM32能夠繼續運行,並進行相應的保護操作。

原理

    時鐘安全系統被激活後,時鐘監控器將實時監控外部高速振盪器;如 果HSE時鐘發生故障,外部振盪器自動被關閉,產生時鐘安全中斷,此中斷被連接到Cortex-M3的NMI的中斷;與此同時CSS將內部RC振盪器切換爲STM32的系統時鐘源。( 對於STM32F103 ,時鐘失效事件還將被送到高級定時器TIM1的剎車輸入端,用以實現電機保護控制)

 注意

    一旦CSS被激活,當HSE時鐘出現故障時將產生CSS中斷,同時自動產生 NMI。NMI將被不斷執行,直到CSS中斷掛起位被清除。因此,在NMI的處理程序中必須通過設置時鐘中斷寄存器(RCC_CIR) 裏的CSSC 位來清除CSS中斷。

應用

1、啓動時鐘安全系統CSS:

RCC_ClockSecuritySystemCmd(ENABLE);     // (NMI 中斷是不可屏蔽的!)

2、外部振盪器實現時,產生中斷,對應的中斷程序:

void NMIException(void)
{
    if (RCC_GetITStatus(RCC_IT_CSS) != RESET)
    {    // HSE、PLL 已被禁止(但是PLL 設置未變)
         /* …… */ // 客戶添加相應的系統保護代碼處
        // 下面爲HSE恢復後的預設置代碼
       RCC_HSEConfig(RCC_HSE_ON);  // 使能HSE
       RCC_ ITConf ig(RCC_IT_HSERDY, ENABLE); // 使能HSE就緒中斷
       RCC_ ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL 就緒中斷
       RCC_ClearITPendingBit(RCC_IT_CSS );  // 清除時鐘安全系統中斷的掛起位

       // 至此,一旦HSE時鐘恢復,將發生HSERDY中斷,

       //在RCC中斷處理程序裏, 系統時鐘可以設置到以前的狀態 
    }
}

3、在RCC的中斷處理程序中,再對HSE和PLL 進行相應的處理。

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