目錄預覽
0.前言
2.內部 RC 振蕩器校準
3.內部 LSI 振蕩器測量
4.X-CUBE-RC-CALIB 演示
5.結論
0.前言
STM32U5 系列微控制器內嵌兩個可選為系統時鐘源的內部 RC 振蕩器。它們是 HSI16(高速內部)和 MSI(多速內部)振蕩器,其可驅動兩個獨立的輸出:MSIS(用于系統時鐘)和 MSIK(用于某些外設作為內核時鐘)。HSI16 振蕩器的典型頻率為 16MHz。MSI 振蕩器為多速低功耗時鐘源。STM32U5 系列微控制器(稱為 STM32U5 器件)具有三個輔助內部時鐘源:
? LSI:32kHz(內部低速)
? HSI48:48MHz(內部高速),可直接用于 USB、RNG(真隨機數發生器)和 SDMMC(SD/SDIO MMC 卡主機接口)。
? SHSI:48MHz(+抖動)內部安全 RC 振蕩器,專用于為 SAES 外設提供時鐘。
工作溫度對 RC 振蕩器的精度有影響。在 30°C 時,HSI16 精度為±0.5%,MSI 精度為±0.6%,HSI48 精度為±4%。但在–40°C 至125°C 的溫度范圍內,精度會降低。為補償溫度對內部 RC 振蕩器精度的影響,STM32U5 器件內置一些功能用于校準 HSI16、MSI 和 HSI48 振蕩器及測量 LSI 振蕩器頻率。
當系統中有 32.768kHz 的 LSE(低速外部)時鐘源可用時,MSI 振蕩器的頻率可通過硬件自動微調,從而達到優于±0.25%的精度。這種使用 LSE 進行的自動硬件校準被稱為 PLL(鎖相環)模式。
本應用筆記尚未對 PLL 模式進行介紹,僅側重于用戶微調。本文檔還詳細介紹了如何校準 HSI16、MSI 和 HSI48 內部 RC 振蕩器,方法如下:
? 基于找到具有最小誤差的頻率的方法
? 基于找到最大允許頻率誤差的方法
? 制定一個預先測量值的表然后在其中搜索相應變化的方法LSI 振蕩器的測量是通過將振蕩器連接到定時器輸入捕獲來實現的。
本應用筆記隨附的 X-CUBE-RC-CALIB 擴展包包含執行這些內部振蕩器校準的源代碼,以及運行示例所需的所有嵌入式軟件模塊。
1.STM32U5 系統時鐘
STM32U5 器件具有下列時鐘源可用于驅動系統時鐘:
? HSI16:16 MHz 高速內部 RC 振蕩器時鐘
? HSE:4 至 50 MHz 高速外部振蕩器時鐘。
? MSI(MSIS):100 kHz 到 48 MHz 多速內部 RC 振蕩器時鐘
? PLL:1 MHz 到 160 MHz 鎖相環(PLL),由 HSI16、MSI 或 HSE 振蕩器提供時鐘HSI16 振蕩器的典型頻率為 16 MHz,功耗為 150 μA。
MSI RC 振蕩器基于四個內部 RC 振蕩器:MSIRC0 = 48 MHz、MSIRC1 = 4 MHz、MSIRC2 = 3.072 MHz、MSIRC4 = 400 kHz。每個 MSIRCx 振蕩器具有四個分頻器:/1、/2、/3 和/4。MSI 共提供了 16 個頻率范圍,可選擇用于兩種輸出:MSIS(用于系統時鐘)和 MSIK(用于外設內核時鐘)。
MSI 的設計為工作電流與頻率成正比(請參考產品手冊以獲得 MSI 功耗與所選頻率范圍之間關系的更詳細信息),當 CPU 在低頻運行時,可最小化內部振蕩器功耗。在從復位重啟或待機、關斷低功耗模式喚醒后,MSIS 時鐘被用作系統時鐘。從停機模式喚醒后,可選擇 MSI 時鐘而不是 HSI16 作為系統時鐘。
HSI48 時鐘信號由內部 48 MHz RC 振蕩器生成,可直接用于 USB、RNG 和 SDMMC。內部 RC 振蕩器(HSI16、MSI 和 HSI48)提供了一個低成本時鐘源(無需外部元件)。它們還具有比外部振蕩器更快的啟動時間和更低的功耗。可校準 HSI16、MSI 和 HSI48 振蕩器以提高其精度。但即使校準后,內部 RC 振蕩器頻率精度也不如外部晶振或陶瓷諧振器的頻率精度(幾十 ppm)高。
注:若外部振蕩器發生故障,則 MSI 內部 RC 振蕩器還可作為備份時鐘源(輔助時鐘)使用。
STM32U5 器件還嵌入了以下次級時鐘源(不能用作系統時鐘):
? LSI:32kHz 低速內部 RC,可在停機和待機模式下保持運行用于 IDWG(獨立看門狗)、RTC 和 LCD。LSI振蕩器無法校準,但可通過測量來評估任何頻率偏差(由于溫度和電壓變化)。
? LSE 晶振:32.768 kHz 低速外部晶振 RC,可選地驅動 RTC(實時時鐘)
? HSI48:48 MHz 高速內部 RC,設計用于通過特制 CRS(時鐘恢復系統)電路為 USB 外設提供高精度時鐘。它還可驅動 RNG 和 SDMMC。
? MSIK:多速內部 RC 振蕩器時鐘,用于外設內核時鐘(源自 MSIRCx 振蕩器)
? SHSI:48 MHz 內部 RC 振蕩器,專為 SAES 外設提供時鐘
2.內部 RC 振蕩器校準
由于生產過程的不同,每個器件的內部 RC 振蕩器的頻率都可能不同。因此,MSI 和 HSI16 RC 振蕩器由意法半導體在 TA = 30 °C 時進行工廠校準。
復位后,工廠校準值自動加載到內部校準位中。可微調內部 RC 振蕩器的頻率,以在更寬的溫度和供電范圍內達到更好的精度。這就是微調位的作用。對于 HSI16 振蕩器,復位后校準值加載于 HSICAL[11:0]中。
使用五個微調位 HSITRIM[4:0]進行微調。默認微調值為 16。增加/降低此微調值會增加/降低 HSI16 頻率。HSI16 振蕩器微調步長為 0.18%(約 29 kHz),具體如下:
? 將微調值寫為 17 至 31 會增加 HSI16 頻率。
? 將微調值寫為 0 至 15 會降低 HSI16 頻率。
? 將微調值寫為 16,HSI16 頻率會保持為默認值。下圖顯示了隨校準值變化的 HSI16 振蕩器行為。HSI16 振蕩器頻率隨校準值增加(校準值 = 默認的 HSICAL[11:0]+ HSITRIM[4:0])。
對于 MSIRCx 振蕩器(x = 0..3),復位后校準值加載于 MSICALx[4:0]位中。五個微調位 MSITRIM[4:0]使微調范圍更寬。校準基于將默MSICALx[4:0](復位值)加上 MSITRIMx[4:0]。
結果存儲在 MSICALx[4:0] = 默認 MSICALx[4:0] + MSITRIMx[4:0]中。
示例
假設默認的 MSI 校準值 MSICALx[4:0]為 0x10:
1.將0x010x0F和之間的值寫入 MSITRIM[4:0],會使校準值 MSICALx[4:0]處于 MSICALx[4:0] = 0x10 + 0x01= 0x11 到 MSICALx[4:0] = 0x10 + 0x0F = 0x1F 的范圍內。這些結果大于 0x10(默認的 MSICALx[4:0]值),因此 MSIRCx 頻率增加 1 步(0x11 - 0x10)至 15 步(0x1F - 0x10)。
2. 將 0x11 和 0x1F 之間的值寫入 MSITRIM[4:0],會使校準值 MSICALx[4:0]處于 MSICALx[4:0] = 0x10 + 0x11 =0x01 到 MSICALx[4:0] = 0x10 + 0x1F = 0x0F 的范圍內。這些結果小于 0x10(默認的 MSICALx[4:0]值),因此 MSIRCx 頻率降低 1 步(0x01)至 15 步(0x0F)。
3. 在 MSITRIM[4:0]中寫入默認校準值 0x10 會導致校準值 MSICALx[4:0]等于MSICALx[4:0] = 0x10 + 0x10 = 0x00,因此 MSIRCx 頻率會降低 16 步(最低頻率)。
下圖顯示了 MSIRCx 相比于 MSICALx[4:0]在 4MHz 時的行為。
對于 HSI48 振蕩器,復位后校準值加載于 HSI48CAL[8:0]中。使用六個微調位 TRIM[6:0](在 CRS_CR 寄存器中)進行微調。默認微調值為 64。增加/降低此微調值會增加/降低 HSI48 頻率。
HSI48 振蕩器微調步長為 0.12%(約 57 kHz),具體如下:
? 將微調值寫為 65 至 127 會增加 HSI48 頻率。
? 將微調值寫為 0 至 63 會降低 HSI48 頻率。
? 將微調值寫為 64,HSI48 頻率會保持為默認值。
下圖顯示了隨校準值變化的 HSI48 振蕩器行為。HSI48 振蕩器頻率隨校準值增加(校準值 = 默認的 HSI48CAL[8:0]+ TRIM[6:0])。
原文標題:應用筆記|如何在 STM32U5 系列上校準內部 RC 振蕩器
文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
-
單片機
+關注
關注
6039文章
44575瀏覽量
636394 -
STM32
+關注
關注
2270文章
10906瀏覽量
356564
原文標題:應用筆記|如何在 STM32U5 系列上校準內部 RC 振蕩器
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論