公司負責硬體的同事測試發現,rtc使用外部晶振時,由於一些干擾(高頻訊號之類的),外部晶振會出現不起振的情況,於是就決定把外部晶振取消了,又因為裝置要低功耗的,就沒用有源的晶振,於是乎就用了stm32內部的rc時鐘
rc時鐘的兩個分頻值都可以設定,校準的原理很簡單,固定乙個分頻值,然後動態調整另乙個分頻值ji就ok了。
校準步驟:
1、首先隨便設定兩個個分頻值,比如127,255,其中固定的值為127,另乙個分頻值為y1(此處的y1就是255)
2、然後利用秒中斷(或者與秒中斷等效的**),獲取rtc發生一次秒中斷所需要的實際時間t1,單位是ms
3、利用公式 y2=y1*1000/t1,得到新的分頻值y2。
4、然後用127(固定值),和新的分頻值y2,重新配置rtc,至此,一次校準就完成了,然後可以利用rtc做計時
5、把y2寫入rtc的備份暫存器或者flash或者eeprom,以備下次使用
6、把y2當作y1,重複1到5的步驟
具體**實現:
void vrtccalibrate(void)
/* 等待rtc時鐘執行穩定 */
hal_delay(500);
}else
debug0("hrtc.init.asynchprediv: %u\r\n",hrtc.init.asynchprediv);
debug0("hrtc.init.synchprediv: %u\r\n",hrtc.init.synchprediv);
ulstarttime = hal_gettick();
uint32_t temp = hrtc.instance->ssr;
hal_delay(2);
while(temp!=hrtc.instance->ssr && hal_gettick()-ulstarttime< 3000);
ulendtime = hal_gettick();
if( ulendtime >= ulstarttime + 3000)
debug0("%u\r\n",ulendtime - ulstarttime);
uint32_t ulcalibratetime = (hrtc.init.synchprediv) * 1000/(ulendtime-ulstarttime);
debug0("ulcalibratetime:%u\r\n",ulcalibratetime);
if( ulcalibratetime > int_least16_max )
hrtc.init.asynchprediv = 36;
hrtc.init.synchprediv = ulcalibratetime;
if (hal_rtc_init(&hrtc) != hal_ok)
/* 等待rtc時鐘執行穩定 */
hal_delay(500);
debug0("實測rtc頻率:%uhz\r\n",(hrtc.init.asynchprediv+1)*(hrtc.init.synchprediv+1));
hal_rtcex_bkupwrite(&hrtc,rtc_bkp_dr1,ulcalibratetime);
}其中:
ulstarttime = hal_gettick();
uint32_t temp = hrtc.instance->ssr;
hal_delay(2);
while(temp!=hrtc.instance->ssr && hal_gettick()-ulstarttime< 3000);
相當於一次秒中斷
此**可以解決不同stm32內部rc時鐘的誤差,不管是什麼頻率,都可以得到乙個比較準確的秒中斷,實測誤差不超過5ms,每隔一段時間,校準一次rtc時鐘,還可以解決rc時鐘溫漂的問題。
此**是基於stm32的滴答時鐘做的校準,若滴答時鐘不准,那就沒辦法了
STM32,RTC週期性喚醒(wakeup)中斷
stm32l151 int main void static void mx rtc init void enable the wakeup 配置rtc cr暫存器的低兩位,選擇rtc計數器時鐘的頻率這裡是1hz,cr暫存器的第十四位使能wakeup喚醒中斷,給wakeup定時器賦值為10,這裡就是...
STM32RTC喚醒功能配置(基於LL庫)
以下函式是基於stm32l476晶元寫的 函式名稱 rtc wake init 函式說明 rtc喚醒初始化 需要在時鐘初始化中開啟lse 輸入引數 無 返回引數 無 void rtc wake init void 設定重裝載值 ll rtc wakeup setautoreload rtc,5 選擇...
複習stm32中關於RTC時鐘知識
在做智慧型手環時候使用到了關於rtc時鐘的,今天我們來複習一下關於他的知識點。文章中我是參考的有stm32f411的中文參考手冊,需要的話我會上傳這個pdf版。養成查資料的好習慣 stm32之rtc實時時鐘 這個裡面比較詳細,還新增了例程。stm32 rtc實時時鐘這個鏈結裡面詳細講述rtc中的主要...