來源于粉絲提問:

單片機上電后,初始運行頻率通常依賴內部振蕩器,而非外部晶振。
其設計目的是提供快速啟動的時鐘信號,盡管精度較低可能在5%-50%范圍內波動,具體取決于溫度和電源電壓。
但是,確保單片機能從復位向量開始執行代碼,包括后續配置外部晶振以獲得更穩定、精確的時鐘。
對于大多數單片機,特別是基于ARM Cortex-M架構的MCU(如STM32系列),在初始化代碼中,通常會執行以下步驟來從內部RC振蕩器切換到外部晶振:
啟用外部高速時鐘(HSE);
等待HSE穩定;
配置PLL(鎖相環)以獲得所需的系統時鐘頻率;
切換系統時鐘源到PLL或直接使用HSE;
配置各種時鐘分頻器。
這樣的設計確保單片機在沒有外部時鐘源或外部時鐘源失效的情況下仍能正常啟動。
值得注意的是,外部晶振從啟動到穩定通常需要一定時間,這個過程可能需要幾毫秒甚至更長。
在這段時間內,如果沒有內部振蕩器提供時鐘,處理器將無法執行任何指令。
以下這個項目就是這個原因:硬件看門狗導致MCU啟動時間慢
客戶的需求是:在KL15電壓上電后,MCU需要在200ms內發送出第一包CAN報文數據。

然而,實際測試結果顯示,軟件需要360ms才能發送出第一包數據。
最終測試發現,表面上看似外部晶振起振慢,實際上是由于看門狗在啟動階段一直拉低MCU的RESET腳,從而影響了外部晶振的起振速度,導致MCU一直辦法正常工作。

希望這個解釋能幫助你理解單片機的啟動時鐘機制。這是一個嵌入式開發中非?;A且重要的概念。
