RCC,Reset and Clock Control(復位和時鐘控制),在絕大部分MCU芯片中都包含復位和時鐘控制模塊,也是MCU重要的組成部分。
相比于以前51單片機,現在STM32內部集成的時鐘模塊功能更加豐富,包含時鐘選擇、倍頻、輸出、外設總線時鐘配置等。
STM32 時鐘基礎內容
STM32時鐘樹具有多項功能,可通過分頻和倍頻配置系統以及外設的時鐘頻率,不同型號STM32的時鐘樹有所不同。
1. 時鐘源
STM32的時鐘源分為高速、低速兩類時鐘,同時也分內部和外部。
HSE:High Speed External,高速外部
HSI:High Speed Internal,高速內部
LSE:Low Speed External ,低速外部
LSI:Low Speed Internal,低速內部
HSE時鐘有兩類時鐘源:
外部晶振/陶瓷諧振器
外部用戶時鐘
諧振器和負載電容要求必須盡可能地靠近振蕩器的引腳,減少失真和起振時間。外部用戶時鐘必須使用占空比約為 50% (左右)外部時鐘信號來驅動 OSC_IN 引腳,同時 OSC_OUT 引腳應保持為高阻態。
2. 時鐘選擇
STM32高速時鐘默認為高速內部時鐘(HSI),如果外接有HSE,可通過軟件配置選擇HSE。
低速內部時鐘(LSI)默認是關閉的,如果需要使用速度時鐘,可通過軟件選擇并開啟LSI,也可以選擇使用LSE。
不管是高速還是低速,在不考慮硬件成本的前提下,建議使用精度更高,誤差更小的外部(HSE、LSE)時鐘。
3. 時鐘源輸出
STM32支持MCO引腳輸出時鐘信號,供外部器件使用,同時可通過示波器來測量內部的各項時鐘。
輸出時鐘信號可選擇(HSE、LSE、 PLLCLK)不同來源的信號,同時也支持配置分頻值,這樣就可以盡量滿足輸出時鐘要求。
4. 時鐘分頻和倍頻
STM32的分頻和倍頻功能非常強大,可將時鐘源通過分頻與倍頻技術,使各APB總線時鐘頻率配置為指定值,供各外設使用。
重點就是PLL(鎖相環)的幾個參數:PLL_M、PLL_N、PLL_P、PLL_Q,也就是倍頻、分頻因子。
STM32系統時鐘頻率理論上可以超過官方指定的最大值,比如:STM32F103最大72M,你倍頻為96M也可能正常工作,但實際應用存在風險。
5. 時鐘安全系統
STM32的還有一個重要的功能,就是時鐘安全系統。如果使能了該功能,HSE 時鐘發生故障,將生成一個中斷來向軟件通知此故障,同時,系統時鐘將切換到 HSI 。
通過STM32時鐘樹,可以一目了然STM32時鐘的功能,比如STM32F4系列時鐘樹:
更多關于STM32時鐘的信息,可以參看芯片對應的參考手冊。
STM32 時鐘常規配置
STM32 系統時鐘配置在上電之后,初始化外設之前就要做的一件事。重點配置的內容就是上面提到的基礎內容,時鐘選擇、倍頻分頻,以及系統和外設的時鐘頻率等。
1. 標準外設庫配置時鐘
STM32F0、 F1、 F2、 F3、 F4、 L1系列都有標準外設庫,如果外部高速時鐘頻率和官方一致,就可以直接使用標準外設庫中的代碼。
地址:
https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html
具體為system_stm32fxxx.c中的 SystemInit 和 SetSysClock 函數。
如果你的外部高速時鐘頻率和代碼不對應,需要修改對應的參數。比如:STM32F407外部晶振頻率默認25M,如果你硬件使用12M,則需要修改分頻和倍頻值(也就是那幾個決定時鐘頻率的參數)。
2. STM32CubeMX配置時鐘
使用STM32CubeMX配置時鐘,通過圖形化界面,一目了然,非常方便。如果配置錯誤,還會有“紫色”提醒。
比如:STM32F407時鐘樹配置:
生成的代碼默認在 main.c 文件中的 SystemClock_Config 函數。
提示:分頻和倍頻因子的值不能太大,也不能大小,建議參考官方例程的參考值。
STM32 時鐘常見問題
STM32時鐘模塊一旦出問題就可能引起系統的不正常工作,特別是對時鐘敏感的部分。比如:定時器、串口波特率、I2C時鐘等。
問題一:主頻變慢問題
主頻,指CPU的時鐘頻率,或者系統時鐘。主頻變慢通常表現為程序運行慢、卡頓、通信異常等。
通常引起主頻變慢的原因有:
時鐘源選擇不對;
外時鐘振頻率和軟件配置不對;
分頻和倍頻因子不對;
外部晶振電路不對;
測量主頻是否變慢,最直接的方法是通過配置MCO,輸出內部PLLCLK時鐘(或HSE時鐘),用示波器(或邏輯分析儀)測量其頻率。
問題二:外設總線APB時鐘不同的問題
看到很多人遇到過這樣的問題:TIM定時快(或慢)一半。
這個問題的原因:STM32的APB時鐘存在“x2”的問題。
也就是說:如果APB分頻值等于1,則x1;APB分頻值不等于1,則x2。用一張動畫來說明:
因此,移植代碼的時候,一定要注意時鐘源(頻率),否則就會快(或慢)一倍的問題。
問題三:外部高速時鐘失效的問題
STM32通常會使用外部晶振作為高速時鐘,如果外部時鐘失效,程序可能表現為“卡頓”的現象。
出現這個問題有可能是外界環境干擾,或者晶振質量問題。此時,應該使能CSS(Clock Security System)時鐘安全系統功能。
使能CSS功能之后,可以做到:
程序進入 NMI 中斷,通過程序判斷 HSE 是否失效;
切換到 HSI 作為時鐘源,重新配置時鐘并啟動程序;
這樣就能讓“死程序”變活,然后程序照常執行。
提示:CSS功能默認是關閉的。標準外設庫中系統初始化代碼默認配置開啟CSS,STM32CubeMX默認配置是關閉的。
復盤一下
▼時鐘基礎內容:時鐘源、時鐘選擇、時鐘源輸出、時鐘分頻和倍頻、時鐘安全系統;
▼時鐘常規配置:標準外設庫和STM32CubeMX配置時鐘;
▼時鐘常見問題:主頻變慢問題、APB時鐘不同的問題、外部高速時鐘失效的問題;
-
STM32
+關注
關注
2270文章
10903瀏覽量
356275 -
RCC
+關注
關注
0文章
93瀏覽量
26955 -
時鐘源
+關注
關注
0文章
93瀏覽量
15980
原文標題:從小白到 Pro | RCC時鐘基礎知識和常見問題
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論