娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年10月10日(星期四)

正在發生

2018年10月10日 | STM32系統時鐘的監控和切換

發布者:phi31 來源: eefocus關鍵字:STM32  系統時鐘  監控和切換 手機看文章 掃描二維碼
隨時隨地手機看文章

在前一段時間的公司的項目中要求用到STM32這款處理器在外部晶振異常的情況下自動的切換到內部晶振,在網上找了N多的資料終于在網上找到了一個官方的研討會的PPT里面簡單的介紹了一下,于是順著這個思路試著去編寫代碼,沒想到官方提供的思路還蠻靠譜!
—————————————————我是華麗的分割線———————————————————
[轉載]STM32系統時鐘的監控和切換

[轉載]STM32系統時鐘的監控和切換

[轉載]STM32系統時鐘的監控和切換
—————————————————我是華麗的分割線———————————————————
函數一、

void INIT_CLOCK(void)
{   
#if 1
    ErrorStatus HSEStartUpStatus;
    RCC_DeInit();  //復位RCC寄存器
    RCC_HSEConfig(RCC_HSE_ON);  //設置外部高速晶振 (HSE)
    HSEStartUpStatus = RCC_WaitForHSEStartUp();  //等待 HSE 起振
#if 1
    //判斷外部晶振是否OK,如果OK就用外部晶振,如果不行,就用內部晶振,優先用外部晶振。
    if(HSEStartUpStatus == SUCCESS)
    {
        RCC_ClockSecuritySystemCmd(ENABLE); //啟動時鐘安全系統 CSS
        //外部晶振配置
        RCC_HCLKConfig(RCC_SYSCLK_Div1);   //設置ABH時鐘(HCLK):HCLK=SYSCLK
        //設置PLL時鐘源及倍頻系數, PLLCLK = HSE*PLLMul = 8*8 = 64MHz 實際是:8*8=64MHz
        RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_2);
        RCC_PLLCmd(ENABLE); //使能PLL

        //檢查指定的RCC標志位設置與否
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // Wait till PLL is ready

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //設置系統時鐘 (SYSCLK)

        //返回作用系統時鐘的時鐘源
        // Wait till PLL is used as system clock source
        while(RCC_GetSYSCLKSource() != 0x08);
    }
    else
#endif
    {
        //內部晶振配置
        RCC_DeInit();  //復位RCC寄存器
        RCC_HSEConfig(RCC_HSE_OFF);       //關閉外部晶(HSE)
        RCC_HCLKConfig(RCC_SYSCLK_Div1);   //設置ABH時鐘(HCLK):HCLK=SYSCLK
        //設置PLL時鐘源及倍頻系數, PLLCLK = HSI/2*PLLMul = 8/2*12 = 48MHz 實際是:48MHz
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
        RCC_PLLCmd(ENABLE); //使能PLL

        //檢查指定的RCC標志位設置與否
        //while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // Wait till PLL is ready

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);          //設置系統時鐘 (SYSCLK)

        //返回作用系統時鐘的時鐘源
        // Wait till PLL is used as system clock source
        while(RCC_GetSYSCLKSource() != 0x08);
    }    
#endif
}
—————————————————我是華麗的分割線———————————————————
在上面哪一個函數中只有在外部晶振啟動初始化中才啟動了時鐘安全系統(PS:紅色加粗部分)因為只有外部晶振初始失敗再切換至內部晶振,此函數是外部晶振啟動優先只有外部晶振啟動失敗再去啟動內部晶振。

函數二、

void NMIException(void)
{
    if(RCC_GetITStatus(RCC_IT_CSS) != RESET)
    {
#if 0                 //內部晶振配置
        RCC_DeInit();  //復位RCC寄存器
        RCC_HSEConfig(RCC_HSE_OFF);       //關閉外部晶(HSE)
        RCC_HCLKConfig(RCC_SYSCLK_Div1);   //設置ABH時鐘(HCLK):HCLK=SYSCLK
       //設置PLL時鐘源及倍頻系數, PLLCLK = HSI/2*PLLMul = 8/2*12 = 48MHz 實際是:48MHz
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
        RCC_PLLCmd(ENABLE); //使能PLL

        //檢查指定的RCC標志位設置與否
        //while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);          //設置系統時鐘 (SYSCLK)

        //返回作用系統時鐘的時鐘源
        // Wait till PLL is used as system clock source
        while(RCC_GetSYSCLKSource() != 0x08);
        CLKOUT_8M_INIT();    //PA8端口時鐘輸出為24025提供8MHz時鐘

        RCC_ITConfig(RCC_IT_HSIRDY,ENABLE);     //使能 HSI就緒中斷
        RCC_ITConfig(RCC_IT_PLLRDY,ENABLE);     //使能 PLL就緒中斷
#else
        NVIC_SystemReset();                     //重啟
        RCC_ITConfig(RCC_IT_HSERDY,ENABLE);     //使能 HSE就緒中斷
        RCC_ITConfig(RCC_IT_PLLRDY,ENABLE);     //使能 PLL就緒中斷       
#endif
        RCC_ClearITPendingBit(RCC_IT_CSS);      //清除時鐘安全系統中斷的掛起位
    }
}
—————————————————我是華麗的分割線———————————————————
NMIException()函數是晶振異常函數的處理函數在異常中斷函數中調用此函數,紅色部分是內部晶振初始如果所以紅色部分的代碼可以實現外部晶振“無縫”的切換到內部晶振(如果是用于特定的場合如:醫療設備可以使用此段代碼),但由于我們產品對實時性要求不是很高我還是決定重新重啟設備再初始化晶振。
函數三、

void NMI_Handler(void)
{
    NMIException();
}
—————————————————我是華麗的分割線———————————————————
NMI_Handler()函數是在STM32的庫文件中的“stm32f0xx_it.c”中的我們把晶振異常處理函數放置此不可屏蔽的異常中斷函數中就可以實現晶振異常時的相當于處理。

—————————————————我是華麗的分割線———————————————————
int main(void)
{
    SystemInit();
    INIT_CLOCK();        //使用HSI時鐘初始化系統時鐘
    for(;;)
    {
     ......
    }
}

關鍵字:STM32  系統時鐘  監控和切換 引用地址:STM32系統時鐘的監控和切換

上一篇:STM32F103時鐘配置流程
下一篇:OK6410-實驗指令筆記

推薦閱讀

6月的一天,也就是美國對中國膠合板實施嚴格關稅的七個月后,位于美國俄勒岡的一家木材進口商接到了供應商的電話,詢問他是否愿意免稅獲得一些中國膠合板。進口商David Visse問道,這將如何運作?因為進口產品帶有識別碼,美國海關代理商會檢查這些識別碼。??“不要擔心,”Visse先生說供應商告訴他,膠合板將被剝去中國標記,“我們會使用其他編碼發貨...
摘要:在電源行業,示波器是通用的測試儀器,但許多特色需求,比如電源測試要求通道隔離,有時通道數量需要8個以上,以及CAN通訊等,這些需求示波器都無法滿足。但是對示波記錄儀來講,這些需求都不是問題。 一、隔離測試 隔離測試是電源產品非常重要的訴求,一般示波器均是不隔離,若示波器地與非隔離電源的地直接相連,可能會造成電源燒毀,示波器炸機的...
目前電動汽車越來越受歡迎,但對潛在客戶來說,充電時間過長仍是一大問題。相比較而言,一輛裝有內燃機的傳統SUV車型只需加油5分鐘,就能行駛300英里,而一輛最先進的電動汽車則需要大約充電1小時,才能實現同樣的續航里程。因此,需要發展快速充電并且高效運行的大容量鋰離子電池技術。(圖片來源:中國科學技術大學)據外媒報道,中國科大合肥微尺度物質...
中國機械臂廠商主要扎堆于中低端領域,缺乏核心技術,但如今,時代給了我們一次彎道超車的機會。文|羅寧“這個機器人的每一個環節,拆掉都夠我們一個院當畢業設計了。”“現在終于理解為什么十個普通工程師也比不上一個天才工程師了。”四個月前,B站UP主稚暉君憑借一輛可以自動駕駛的自行車登上熱搜(之前的文章鏈接),經過一段時間的“閉關修煉”,當...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 遂溪县| 张家口市| 南召县| 辽阳县| 和顺县| 江都市| 类乌齐县| 洮南市| 广水市| 云浮市| 璧山县| 剑河县| 麻阳| 庆云县| 黄冈市| 阳东县| 沙坪坝区| 会东县| 湛江市| 田阳县| 梁平县| 苏州市| 磴口县| 西城区| 中宁县| 宝兴县| 宜城市| 合肥市| 濮阳县| 宝应县| 水富县| 神农架林区| 恭城| 临武县| 望江县| 大港区| 耒阳市| 密山市| 安国市| 湘乡市| 霍城县|