RTC
RTC的本質很簡單,就是一個時鐘經過精確分頻最后得到的一個1Hz的時鐘,也可以說是計數器,其他大部分功能都是基于這個計數器設計的數字邏輯。
本文講的RTC是基于STM32F030來講的,相比與F1系列的RTC來說,M0的將很多原本需要軟件實現的功能硬件化了,使用起來更加便利。
先說說STM32F030的RTC有些什么功能:
1.集成日歷功能,不用像STM32F103一樣需要軟件算法來做;
2.夏令時補償;
3.鬧鐘功能;
4.集成了周期性自動喚醒單元;
5.外部參考時鐘;
6.時鐘平移校準(亞秒級);
7.數字校準
8.時間戳;
9.入侵檢測;
10.備份寄存器
先看看RTC的框圖:
從框圖中圈出來的部分可以看到,上面提到的RTC功能,大部分在框圖上面都有體現,接下來我們按照RTC的功能點講一講各個功能的詳細內容
RTC的時鐘分頻
在詳述每個功能點之前,我們先了解下RTC的核心,即1Hz的時鐘的來歷。
從框圖中可以看到RTC的時鐘來源有3個,時鐘源先經過一個精密校準后,再經過一個異步預分頻器和一個同步預分頻器后,得到的即是我們想要的1Hz的時鐘,這個時鐘將被送到日歷模塊,供日歷計數用。
我們常用的一個時鐘源是一個32.768kHz的低速外部時鐘(LSE),為什么是這個特殊的頻率呢?因為這個時鐘經過分頻后可以得到一個完美的1Hz的時鐘供給日歷模塊使用,最大程度上保證時鐘的精確性,當然,實際上來說,32.768kHz的時鐘并不是完全精確的,所以就會導致實際上的時間會在一段時間后跑偏,且隨時間的推移,偏差逐漸擴大,所以我們小時候用電子手表時,會發現時間在我們調整準確后,慢慢的又會出現一點偏差,偏差可以被RTC內部邏輯調整縮小,后面會詳細講述。
32.768kHz為什么比較容易分頻得到1Hz時鐘呢?
由于我們單片機采用的是二進制數,所以分頻器也是以二進制為基礎進行分頻,32.768kHz在不斷的二分頻(15次)后,能得到一個精確的1Hz時鐘,也就是1秒鐘的時間。
而其他兩個時鐘源(HSE/32)和LSI經過兩個分頻器后得到的時鐘往往都是約等于1Hz,長久計數會產生較大的誤差,因為它們的頻率在經過無數次2分頻后,一般來說,最后都不是一個整數,都是游離在1Hz左右。
理論上來說,如果想要一個1Hz的時鐘,一個分頻器就可以做到,為什么會有兩個分頻器呢?因為STM32F030可以精確到亞秒級,在經過第一個時鐘分頻器后,此時得到的時鐘ck_apre(一般為256Hz)會作為亞秒計數器,提供亞秒級別的計數。
日歷模塊
日歷模塊是我覺得STM32F030相比與103最大的便捷之處,不需要軟件算法的干預,就可以在預設初始年月日,時分秒的基礎上開始計時,且還能自動計算星期,閏年也會被自動計算。
日歷模塊有三個寄存器:時間寄存器, 寄存器,亞秒寄存器
日歷寄存器是有兩套的,一套是RTC域的本體,一套是由系統時鐘控制的影子寄存器。每隔兩個RTC_CLK,就會將本體寄存器中的值復制到影子寄存器中。
由于RTC的特性,所以很多情況下在芯片斷電后,希望內部的時間系統不受到影響,所以RTC域通常被要求單獨供電,即在芯片斷電后,RTC還能夠正常工作,當下次芯片上電后,影子寄存器在和RTC域本體的日歷寄存器同步后,仍然能得到正確時間。
夏令時
支持夏令時功能,可以將日歷寄存器中的時間增加或減少一個小時。
利用 SUB1H 或 ADD1H,軟件只需單次操作便可在日歷中減去或增加一個小時,無需執行
整個初始化步驟,還可以使用 BKP 位來記錄是否曾經執行過此操作
因為有的國家實行夏令時制度,需要在夏天時,將全國時間集體向前撥一個小時,在夏令時結束后,又將時間往回撥一個小時,所以030集成了這個功能(有興趣的可以百度一下夏令時)。
鬧鐘功能
鬧鐘功能就是通過在鬧鐘寄存器設置一個預定時間,當日歷寄存器中的時間和鬧鐘寄存器時間匹配后,會產生一個鬧鐘信號,在配置鬧鐘中斷以后,也會生成中斷。
要注意的是鬧鐘寄存器是沒有年份和月份的,只有日期,時分秒及亞秒。鬧鐘寄存器還有一個掩碼功能(MSK),開啟后日期,時、分、秒及亞秒都可以被單獨屏蔽,不和日歷寄存器中對應值作比較。
周期性自動喚醒單元
配置此功能后,可以在器件進入低功耗模式后,根據配置時間在到達預定時間后使器件退出低功耗模式??膳渲玫臅r間范圍為1s到36小時。
外部參考時鐘,時鐘平移校準,數字校準
把這三個功能放在一起的原因是,三個功能都是RTC的時鐘精度進行調整的功能,但是三個功能調整時間的方法和調整精度上又是不同的。
外部參考時鐘(一般為50Hz或者60Hz):
通過特定GPIO口輸入一個參考時鐘源,外部參考時鐘的精度我們認為是高于現在RTC使用的32.768kHz時鐘精度的(32.768kHz由于偏差,并非一定為該數值),具體的做法是用1Hz時鐘每次在邊沿時檢測是否有高精度外部時鐘的邊沿,如果兩個時鐘的時鐘沿正好對齊。則認為1Hz時鐘無偏差,若時鐘不對齊,會對異步預分頻寄存器進行重載,微調后續1Hz時鐘邊沿,使其對齊外部參考時鐘邊沿。
時鐘平移校準:
參考一個更高精度的遠程時鐘,可以對當前的RTC時鐘進行秒級或者亞秒級的增加或減少時間。我的理解是,獲取到一個我們認為的更高精度的時鐘當前值后,手動對自身RTC的值進行調整,以提高RTC的精度。
數字校準:
數字校準是三種校準方式中最為細微的校準方式,分為正校準和負校準。
正校準可以在8秒或者16秒的時鐘周期內,對RTC的源時鐘。RTC_CLK,在每2的11次方的脈沖內,多插入一個脈沖。
負校準可以在32秒的時鐘周期內,在每2的20次方的脈沖內,減少1~255個脈沖,由寄存器決定具體減少數值。
由于RTC的32.768KHz的時鐘源多少都會存在一點偏差,數字校準可以做到從源頭上對RTC的精度進行調整,但是首先我們得獲取到時鐘源的具體偏差值才能更好的對偏差進行校準。
時間戳和入侵檢測
時間戳
時間戳寄存器和日歷寄存器一樣,只是不會計數,當有時間戳事件發生的時候,日歷寄存器的當前值就會被保存到時間戳寄存器中。
當RTC的RTC_TS引腳檢測到時間戳事件時,當前的日歷寄存器值就會被保存到時間戳寄存器。
入侵檢測
除此之外,入侵檢測的發生也可以被當成時間戳時間,當特定的GPIO引腳檢測到入侵事件時,時間戳就會記下當前入侵事件發生的時間。
入侵檢測事件是當特定的入侵檢測引腳被觸發時(可以設置觸發的電平狀態及保持時間),擦除RTC的備份域寄存器,也可以生成入侵檢測中斷,從停止模式和待機模式喚醒。
備份寄存器
備份寄存器是一小段空間,大小為16字節,可以由用戶自定義寫入數據,當主電源域掉電后,只要RTC域有電,備份寄存器內的數據就不會丟失。但是當入侵事件發生時,備份寄存器會被復位,數據丟失。
總的來說,RTC本身其實并不復雜,尤其是F030的RTC,簡單易用,但是它在整個芯片系統中都是一個很特殊的模塊,因為它可以被單獨供電,且RTC域的寄存器值是不受系統復位影響的,當系統電源域有電時,它由VDD供電,當系統電源域掉電時,它立刻會切換至后備電源域供電。大致示意圖如下:
-
計數器
+關注
關注
32文章
2261瀏覽量
94983 -
RTC
+關注
關注
2文章
542瀏覽量
67030 -
數字邏輯
+關注
關注
0文章
74瀏覽量
16699
發布評論請先 登錄
相關推薦
![](https://file1.elecfans.com/web2/M00/83/14/wKgZomRl1jGAHa7sAAAV9FDk9nQ371.png)
![](https://file1.elecfans.com/web2/M00/85/8C/wKgZomRmM6OAeC21AAF1xRAS7K0827.png)
![](https://file1.elecfans.com/web2/M00/90/7D/wKgZomTaC8mAenBjAAAjRWo5O2s232.png)
![](https://file1.elecfans.com/web2/M00/90/83/wKgaomTaGw-ATCEEAADdcSoljrg268.png)
![](https://file1.elecfans.com/web2/M00/90/CB/wKgZomTcvzqACKICAAAmyErSY44112.png)
![](https://file1.elecfans.com/web2/M00/90/D8/wKgZomTdeQmAJBgnAAE37-qRsSg644.png)
![](https://file1.elecfans.com/web2/M00/90/D9/wKgZomTdeTuAaZXuAAC7iIlNneE536.png)
![](https://file1.elecfans.com/web2/M00/90/D9/wKgZomTdeW6ANakIAADx1h0Wa6c679.png)
![](https://file1.elecfans.com/web2/M00/90/DD/wKgaomTdeaGAGiTXAADp2zXgBHo076.png)
《振南電子STM32視頻教程》第十四講:RTC和BKP
STM32開發 -- RTC詳解
![STM32開發 -- <b class='flag-5'>RTC</b><b class='flag-5'>詳解</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【STM32】RTC詳解
![【STM32】<b class='flag-5'>RTC</b><b class='flag-5'>詳解</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RTC時鐘與觸摸功能詳解(上)
![<b class='flag-5'>RTC</b>時鐘與觸摸功能<b class='flag-5'>詳解</b>(上)](https://file1.elecfans.com/web2/M00/88/BB/wKgZomRwU_GADYruAAEHdua0HoE303.jpg)
RTC時鐘與觸摸功能詳解(下)
![<b class='flag-5'>RTC</b>時鐘與觸摸功能<b class='flag-5'>詳解</b>(下)](https://file1.elecfans.com/web2/M00/88/BB/wKgZomRwU_KAbWw0AADu0fO45xQ266.jpg)
評論