新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32復位/時鐘控制

        STM32復位/時鐘控制

        作者: 時間:2016-12-02 來源:網絡 收藏
        ========================== Reset/Clock Control =======================
        1、時鐘安全系統(CSS)
        時鐘安全系統被激活后,時鐘監控器將實時監控外部高速振蕩器;如果HSE時鐘發生故障,外部振蕩器自動被關閉,產生時鐘安全中斷,該中斷被連接到Cortex-M3的NMI的中斷;同時CSS將內部RC振蕩器切換為STM32的系統時鐘源(對于STM32F103,時鐘失效事件還將被送到高級定時器TIM1的剎車輸入端,用以實現電機保護控制)。
        操作流程:
        1)、啟動時鐘安全系統CSS: RCC_ClockSecuritySystemCmd(ENABLE); (NMI中斷是不可屏蔽的!)
        2)外部振蕩器失效時,產生NMI中斷,對應的中斷程序:
        void NMIException(void)
        {
        if (RCC_GetITStatus(RCC_IT_CSS) != RESET)
        { // HSE、PLL已被禁止(但是PLL設置未變)
        …… // 客戶添加相應的系統保護代碼處
        // 下面為HSE恢復后的預設置代碼
        RCC_HSEConfig(RCC_HSE_ON); // 使能HSE
        RCC_ITConfig(RCC_IT_HSERDY, ENABLE); // 使能HSE就緒中斷
        RCC_ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL就緒中斷
        RCC_ClearITPendingBit(RCC_IT_CSS); // 清除時鐘安全系統中斷的掛起位
        // 至此,一旦HSE時鐘恢復,將發生HSERDY中斷,在RCC中斷處理程序里, 系統時鐘可以設置到以前的狀態
        }
        }
        3)、在RCC的中斷處理程序中,再對HSE和PLL進行相應的處理。
        注意:一旦CSS被激活,當HSE時鐘出現故障時將產生CSS中斷,同時自動產生 NMI。NMI將被不斷執行,直到CSS中斷掛起位被清除。因此,在NMI的處理程序中 必須通過設置時鐘中斷寄存器(RCC_CIR)里的CSSC位來清除CSS中斷。
        2、SysTick工作原理
        Cortex-M3的內核中包含一個SysTick時鐘。SysTick 為一個24位遞減計數器,SysTick設定初值并使能后, 每經過1個系統時鐘周期,計數值就減1。計數到0時, SysTick計數器自動重裝初值并繼續計數,同時內部的 COUNTFLAG標志會置位,觸發中斷(如果中斷使能)。
        3、內部時鐘輸出PA.8(MCO)
        STM32的PA.8引腳具有復用功能——時鐘輸出(MCO), 該功能能將STM32內部的時鐘通過PA.8輸出.
        操作流程:
        1)、設置PA.8為復用Push-Pull模式。
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        2)、選擇輸出時鐘源。
        時鐘的選擇由時鐘配置寄存器(RCC_CFGR)中的MCO[2:0]位控制。
        RCC_MCOConfig(RCC_MCO);
        參數RCC_MCO為要輸出的內部時鐘:
        RCC_MCO_NoClock --- 無時鐘輸出
        RCC_MCO_SYSCLK --- 輸出系統時鐘(SysCLK)
        RCC_MCO_HSI --- 輸出內部高速8MHz的RC振蕩器的時鐘(HSI)
        RCC_MCO_HSE --- 輸出高速外部時鐘信號(HSE)
        RCC_MCO_PLLCLK_Div2 --- 輸出PLL倍頻后的二分頻時鐘(PLLCLK/2)
        注:由于STM32 GPIO輸出管腳的最大響應頻率為50MHz,如果輸出頻率超過50MHz,則輸出的波形會失真。
        4、可編程電壓監測器(PVD)
        STM32內部自帶PVD功能,用于對MCU供電電壓VDD進行監控。通過電源控制寄存器中的PLS[2:0]位可以用來設定監控電壓的閥值,通過對外部電壓進行比較來監控電源。當條件觸發,需要系統進入特別保護狀態,執行緊急關閉任務:對系統的一些數據保存起來,同時對外設進行相應的保護操作。
        操作流程:
        1)、系統啟動后啟動PVD,并開啟相應的中斷。
        PWR_PVDLevelConfig(PWR_PVDLevel_2V8); // 設定監控閥值
        PWR_PVDCmd(ENABLE); // 使能PVD
        EXTI_StructInit(&EXTI_InitStructure);
        EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD連接到中斷線16上
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使用中斷模式
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Raising;//電壓低于閥值時產生中斷
        EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中斷線
        EXTI_Init(&EXTI_InitStructure); // 初始
        EXTI_InitStructure.EXTI_Trigger的賦值可選項:
        EXTI_Trigger_Rising---表示電壓從高下降到低于設定閥值時產生中斷;
        EXTI_Trigger_Falling---表示電壓從低上升到高于設定閥值時產生中斷;
        EXTI_Trigger_Rising_Falling---表示電壓上升或下降越過設定閥值時都產生中斷。
        2)、當工作電壓低于設定閥值時,將產生PVD中斷,在中斷程序中進行相應的處理:
        void PVD_IRQHandler(void)
        {
        EXTI_ClearITPendingBit(EXTI_Line16);
        …… // 用戶添加緊急處理代碼處
        }


        關鍵詞: STM32復位時鐘控

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 丰顺县| 娄底市| 松江区| 垦利县| 额尔古纳市| 海原县| 丰城市| 子洲县| 湾仔区| 邯郸市| 泰来县| 闸北区| 孟津县| 会昌县| 萍乡市| 凌源市| 新绛县| 三河市| 屯门区| 嘉黎县| 随州市| 峨边| 洪雅县| 新昌县| 安新县| 双流县| 讷河市| 绥江县| 湖州市| 荆门市| 天气| 衢州市| 英德市| 德江县| 大城县| 太仆寺旗| 宝丰县| 成武县| 将乐县| 茌平县| 博湖县|