色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32片內(nèi)RTC亞秒特性以及應(yīng)用演示的分享

茶話MCU ? 來源:茶話MCU ? 2023-04-15 11:27 ? 次閱讀

絕大多數(shù)STM32系列里的RTC都具有亞秒【或稱子秒】計數(shù)單元。為了了解亞秒特性及功能,不妨先看RTC的功能框圖。本文中的有關(guān)截圖若無特別說明均來自STM32L4系列參考手冊。

poYBAGQ6GieAQOEaAAFB4__3keE403.jpg
pYYBAGQ6Gi-AE1UnAAFCexBdT7M099.jpg

RTC的時鐘源【RTCCLK】可以是LSE、LSI或者HSE/32,由RTCCLK最終變成日歷的秒脈沖驅(qū)動信號經(jīng)過了2次分頻。先經(jīng)過上圖中A處的異步分頻單元,默認(rèn)分頻系數(shù)是128,形成ck_apre時鐘,默認(rèn)情況下該時鐘頻率為256Hz;然后該時鐘脈沖來到圖中B處的同步分頻單元,默認(rèn)分頻系數(shù)為256,最終形成1Hz的秒脈沖【ck_spre】到日歷單元。關(guān)于兩分頻單元分頻系數(shù)的配置,通過對RTC_PRER寄存器的相關(guān)位編程實現(xiàn)。

poYBAGQ6GkKAK6boAACiM741gNw674.jpg

其中異步分頻系數(shù)配置位【PREDIV_A】有7位,同步分頻系數(shù)【PREDIV_S】有15位。另外,同步分頻單元還包括采用向下計數(shù)方式的亞秒計數(shù)器,它基于異步分頻后的時鐘ck_apre進行計數(shù),溢出時的重裝值等于PREDIV_S。一般來講,它的一個計數(shù)周期就是1s,其計數(shù)分辨率或精度為【1/(PREDIV_S+1)】秒。與之配套的亞秒寄存器,實時記錄亞秒計數(shù)器的計數(shù)值,有效數(shù)據(jù)位乃16位,比PREDIV_S多1位,多出的1位另有它用,此處不表。

pYYBAGQ6GlaAc5OrAAEKYCvNCrM211.jpg

顯然,當(dāng)有了這個亞秒計數(shù)器后,我們就可以獲得少于1秒的時間,或說秒的小數(shù)部分---亞秒,其精度由同步分頻系數(shù)PREDIV_S決定,某時刻的亞秒數(shù)通過亞秒寄存器獲取,對應(yīng)的亞秒時間可以通過上圖中第2個紅色方框內(nèi)的算式求得【提醒:亞秒計數(shù)器采用向下計數(shù)方式】。

關(guān)于RTC的亞秒概念及基本特性就介紹到這里。稍微小結(jié)下:

1、亞秒是對少于1秒的時間稱謂,范圍在0到1秒,并非固定的值;

2、亞秒精度【分辨率】可調(diào),由PREDIV_S參數(shù)決定,即【1/(PREDIV_S+1)】秒;

3、亞秒寄存器【RTC_SSR】實時記錄亞秒計數(shù)器的值,具體由SS[15:0]體現(xiàn);

3、亞秒時間通過算式(PREDIV_S-SS/(PREDIV_S+1)求得;

我們知道RTC除了提供基本的日歷功能外,還有很好的低功耗特性,常用于低功耗的喚醒。有些低功耗應(yīng)用場合,雖然系統(tǒng)需要周期性的喚醒,但對喚醒周期的一致性要求往往并不嚴(yán)格、很多時候的周期值往往遠達不到秒級,比方在10個毫秒上下、幾十個毫秒左右、100毫秒量級不等。像這種場合,我們可以考慮使用RTC的亞秒特性和ALARM功能實現(xiàn)周期性喚醒。

假設(shè)某STM32用戶有這樣的需求,他的系統(tǒng)涉及低功耗,需要周期性地做休眠與喚醒的切換。他希望系統(tǒng)進入休眠后每隔50±20ms的時間范圍內(nèi)被喚醒,喚醒后做些基本的檢測處理后又進入休眠。要實現(xiàn)這個需求,對于很多帶LPTIM的STM32系列也很方便實現(xiàn)。

不過,今天主要想聊聊如何通過RTC來實現(xiàn)該需求。了解STM32的RTC的人可能知道,RTC模塊往往還自帶一個專門的16位向下計數(shù)的喚醒定時器,即下面RTC局部框圖中紅框所在單元。我這里要分享的也不是這個專用喚醒定時器,而是想基于ALARM事件和亞秒特性來實現(xiàn)上面需求。

pYYBAGQ6Gm2AGG9FAAFQYQ7Jhxo979.jpg

對于RTC的ALARM功能我們都不陌生,即先預(yù)設(shè)需要ALARM的時間點,當(dāng)日歷時間跟設(shè)定的ALARM時間匹配時就可以觸發(fā)ALARM事件及中斷。對于ALARM時間點的報警條件可以有很多靈活的組合配置,比方我們可以設(shè)置在某月某日某時某分某秒ALARM,也可以設(shè)置在某分某秒ALARM,其它不關(guān)心,或者僅設(shè)置在某個亞秒時刻ALARM,其它不關(guān)心。

poYBAGQ6Gn-AFrXwAAFnNfyYHn4504.jpg

上圖中四種ALARM設(shè)置,灰色部分表示不關(guān)心項,即不參與日歷值與ALARM設(shè)定值相關(guān)項的比較。這里分別表示的警情時刻是:

第一種,只要日歷中跟ALARM設(shè)置的時、分、秒匹配時報警,其它不關(guān)心;

第二種,只要日歷中跟ALARM設(shè)置的分值、秒值匹配時報警,其它不關(guān)心;

第三種,只要日歷中跟ALARM設(shè)置的秒值和亞秒低3位值匹配時報警,其它不關(guān)心;

第四種,只要日歷中跟ALARM設(shè)置的亞秒的低4位值匹配時報警,其它不關(guān)心;

我們回到前面提到的需求,每隔50±20ms做喚醒,即30ms~70ms范圍內(nèi)實現(xiàn)喚醒都可以接受。如果說使用ALARM中斷,相信很多人自然會想到,先設(shè)定一個ALARM點,等喚醒后再修改新的ALARM值,就這樣延續(xù)下去。

poYBAGQ6GpKAJVyOAAAmdBjRTOo485.jpg

這樣操作也是可以的,即每次在ALARM中斷里修改新的ALARM時間點。下圖是對ALARM值進行編程的流程【設(shè)置時先要關(guān)閉ALARM,修改ALARM值后再手動開啟ALARM單元】:

poYBAGQ6GqKAG4t2AAD1LaORre0332.jpg

不過,結(jié)合眼前的應(yīng)用需求,我們可以不使用上面的做法,而是巧妙地使用RTC亞秒特性來實現(xiàn)周期性的ALARM以滿足需求。怎么個巧法呢?一起來看看。

先假定RTCCLK為32768Hz,RTC同步分頻系數(shù)和異步分頻系數(shù)分別為如下參數(shù):

PREDIV_A=127,PREDIV_S=255。

pYYBAGQ6GriAFZimAACLksb3lOQ608.jpg

依據(jù)現(xiàn)有的分頻配置,則亞秒的時間精度或者說分辨率為(1/256)秒,3.9ms的樣子,即亞秒計數(shù)器每計1個脈沖所對應(yīng)的時間就是3.9ms,算4ms吧。【記住這個數(shù)據(jù)后面要用】

談到這里,我們跳躍一下思路,換個數(shù)學(xué)話題聊聊。【注:這個地方可能有點突兀。突兀的突悟往往離不開艱辛的修行。】

這里有從0開始按照從小到大排列的一批足夠多的自然數(shù)列,按10進制展現(xiàn)。我們來看看幾種情形:

1、如果找出只要個位數(shù)相同的數(shù)據(jù),仍然按照從小到大排列,每相鄰兩個數(shù)的差值一定是10。對不對?

2、如果找出只要個位數(shù)與十位數(shù)都相同的數(shù)據(jù),仍然按照從小到大排列,每相鄰兩個數(shù)的差值一定是100。沒錯吧。

3、如果找出只要個位數(shù)與十位數(shù)以及百位數(shù)都相同的數(shù)據(jù) 仍然按照從小到大排列,每相鄰兩個數(shù)的差值一定是1000。結(jié)論也沒問題。

。。。。。。

到此,我們應(yīng)該發(fā)現(xiàn)規(guī)律了,通過關(guān)注低幾位數(shù)相同而重新有序排列而成的相鄰數(shù)據(jù)之差即為10的幾次方,其實這里相鄰數(shù)的差值也就是原自然數(shù)列中兩個數(shù)的位置間隔。【注意關(guān)鍵詞:位數(shù),數(shù)據(jù),相鄰】我們可以基于下圖的一批十進制數(shù)據(jù)表格做些直觀的觀察。

pYYBAGQ6GsmAXsOSAAGRHjqhMi4969.jpg

好,我們不妨改變下數(shù)據(jù)的進制看看。還是從0開始按照從小到大排列的一批足夠多的自然數(shù)列,按2進制展現(xiàn)。依然看看幾種情形并得出相應(yīng)結(jié)論。

1、若找出只要低1位數(shù)相同的數(shù)據(jù),仍按照從小到大排列,每相鄰兩個數(shù)的差值一定是2;

2、若找出只要低2位數(shù)都相同的數(shù)據(jù),仍按照從小到大排列,每相鄰兩個數(shù)的差值一定是4;

3、若找出只要低3位數(shù)都相同的數(shù)據(jù) 仍按照從小到大排列,每相鄰兩個數(shù)的差值一定是8;

其它我們可以依次類推。

同樣,我們也發(fā)現(xiàn)規(guī)律,通過關(guān)注二進制數(shù)的低幾位相同而重新有序排列而成的相鄰數(shù)據(jù)之差即為2的幾次方。我們可以基于下圖的一批二進制數(shù)據(jù)表格做些直觀的觀察。【橙色代表低2位相同的數(shù)據(jù),綠色代表低3位相同的數(shù)據(jù),紅色代表低4位相同的數(shù)據(jù)】

pYYBAGQ6GtiAKrSvAADfP5g64SY156.jpg

上面專門聊了一段純數(shù)學(xué)話題,繼續(xù)回到我們的亞秒應(yīng)用問題。

我們知道,包括亞秒在內(nèi)的整個日歷數(shù)據(jù)實質(zhì)上是個具有高低順序和進位關(guān)系的數(shù)據(jù),其中,亞秒是整個日歷數(shù)據(jù)里的最低端。當(dāng)我們設(shè)置ALARM參數(shù)時,如果說只關(guān)注亞秒的低1位,其它都不關(guān)心。基于前面的數(shù)學(xué)話題鋪墊可知,每當(dāng)出現(xiàn)低1位數(shù)據(jù)相同的兩個相鄰數(shù),總是相差2個計數(shù)單位,這里就是2個計數(shù)脈沖。換言之,每隔2個計數(shù)脈沖,結(jié)合前面分析,即每隔8ms都會觸發(fā)ALARM事件。

如果說只關(guān)注亞秒的低2位,其它都不關(guān)心,那么每當(dāng)出現(xiàn)低2位數(shù)據(jù)相同的相鄰數(shù),總是相差4個計數(shù)單位,即4個計數(shù)脈沖。換言之,每隔4個計數(shù)脈沖,即16ms都會觸發(fā)ALARM事件。

如果只關(guān)注亞秒的低3位,其它參數(shù)都不關(guān)心,每當(dāng)出現(xiàn)低3位數(shù)據(jù)相同的相鄰數(shù),總是相差8個計數(shù)單位,即8個計數(shù)脈沖,每隔32ms都會觸發(fā)ALARM事件。

其它依此類推。

談到這里,設(shè)置的只關(guān)心亞秒的位數(shù)跟ALARM周期的關(guān)系應(yīng)該說很清晰了。我在下面簡單羅列了基于前面條件下亞秒的關(guān)心位數(shù)與ALARM周期的對應(yīng)表:【灰色表示不關(guān)心,不參與日歷值與ALARM設(shè)定值的比較,只有綠色位參與比較】

poYBAGQ6GumAAbIRAAGMq6uz57k185.jpg

現(xiàn)在期望的喚醒周期是50±20ms,我們配置亞秒計數(shù)器的低3位或者低4位作為ALARM的比較位【說關(guān)心位、參與位什么的都可以】,其它設(shè)置為不關(guān)心就可以滿足要求。我們不妨選擇亞秒計數(shù)值的低4位參與比較,即每兩次相鄰ALARM相差16個計數(shù)脈沖,周期約為64ms。

下面是我使用CubeMx進行的日歷和ALARMA的配置,重點看下ALARM配置。

poYBAGQ6GwCATEdvAAFCKou9yKM926.jpg

這里的ALARM配置只選擇亞秒的低4位參與比較,既然這樣其它參數(shù)就無所謂了。其中那個用于比較的亞秒值我這里寫的12,這個值寫多少并不影響ALARM周期的擬定,只會影響每次發(fā)生ALARM事件時的亞秒計數(shù)器的低4位的值。其實,當(dāng)我們選定只關(guān)心亞秒計數(shù)器的低4位時,重復(fù)ALARM的周期就已經(jīng)定了。

完成配置、建立工程、組織測試代碼。

我在ALARM中斷里讀取每次發(fā)生ALARM事件時的亞秒值。我截取幾個連續(xù)ALARM事件的相關(guān)信息在如下幾幅圖。其中變量Sub_Value和stime1.SubSeconds是一個東西,表示發(fā)生ALARM事件時亞秒計數(shù)器的值。比如下面各截圖中的236、220、204、188、172、156幾個數(shù),顯然兩相鄰數(shù)的間隔保持準(zhǔn)確的16個計數(shù)脈沖,若把這幾個數(shù)轉(zhuǎn)成2進制,他們的低4位都是1100B,即我在前面ALARM設(shè)置的亞秒比較值12

poYBAGQ6Gy2AJPXXAAErzREEWzI139.jpg
pYYBAGQ6GzSAL8MeAAET6ayDZpM703.jpg
poYBAGQ6GzqANsmWAAEeb2LIODY396.jpg
pYYBAGQ6G0GAb1T-AAEfbe0Wdz8748.jpg
pYYBAGQ6G1OASzzRAAGKE8MZMLY567.jpg

若在每次的ALARM中斷里把發(fā)生ALARM的時間點實時打印出來,可以清晰地看到相鄰兩次ALARM事件的時間間隔固定在63ms左右,這個值跟前面規(guī)劃的基本一致。

pYYBAGQ6G2KADofaAAFBYky29_E202.jpg

有人或許會問,相鄰ALARM事件的時間差為什么沒有計數(shù)脈沖數(shù)差值那樣穩(wěn)定精準(zhǔn)。我認(rèn)為主要有兩點原因,一是我測試時并沒有使用標(biāo)準(zhǔn)的32768外部時鐘,而是選擇的內(nèi)部LSI,它的頻率一般在31Khz到33KHz之間,不像LSE那么精準(zhǔn)。還有一個原因,在做亞秒時間計算時,因為無法整除原因肯定會帶來計算偏差。

利用上面方法可以省去每次修改ALARM配置的操作,類似這種具有周期性且周期不大于1秒的應(yīng)用都可以嘗試考慮上述方法,必要的時候可以考慮調(diào)整同步分頻系數(shù)即亞秒計數(shù)器的重裝值以滿足具體的時間精度要求。當(dāng)然,調(diào)整同步分頻系數(shù)的同時往往要調(diào)整異步分頻系數(shù),原則上異步分頻系數(shù)要盡量大以充分降低RTC模塊帶來的功耗,具體應(yīng)用時我們可以綜合考慮后再做調(diào)整。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2276

    文章

    10947

    瀏覽量

    359166
  • LSE
    LSE
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    10305
  • RTC
    RTC
    +關(guān)注

    關(guān)注

    2

    文章

    585

    瀏覽量

    67422
  • 時鐘源
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    16095
  • 時鐘脈沖
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    12791

原文標(biāo)題:巧用STM32片內(nèi)RTC亞秒特性之應(yīng)用示例

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    stm32利用RTC在tamper引腳上輸出脈沖

    芯片用的是STM32F103VBT6,目前程序已經(jīng)可以在tamper(PC13)引腳上輸出校正時鐘,其時鐘頻率為RTC時鐘除以64。但調(diào)了好幾天都無法輸出脈沖,求大神搭救
    發(fā)表于 10-14 21:47

    轉(zhuǎn):XMEGA學(xué)習(xí)記錄——抽筋扒皮徹查內(nèi)RTC32

    _get_time();---------------------------------------------------------------------------------------------------簡單測試一下,讀到的RTC32計數(shù)器的值為0xC05,因為我斷電了一段時間,
    發(fā)表于 07-28 15:04

    STM32CubeMX RTC簡介

    包含二進碼十進數(shù)格式 (BCD) 的、分鐘、小時( 12 或 24 小時制)、星期幾、日期、月份和年份。此外,還可提供二進制格式的值。系統(tǒng)可以自動將月份的天數(shù)補償為 28、29(閏年)、30
    發(fā)表于 08-18 06:37

    怎么實現(xiàn)STM32F10x_RTC中斷?

    怎么實現(xiàn)STM32F10x_RTC中斷?
    發(fā)表于 11-16 08:15

    STM32RTC簡介

    STM32RTC學(xué)習(xí)筆記Mcu:STM32F103RBT61、RTC簡介RTC(Real Time Clock)實時時鐘,是
    發(fā)表于 03-01 06:47

    具有帶32位喚醒計數(shù)器的RTC的超低MCU有哪些

    我目前正在使用 STM32WLE5CC MCU,它具有帶 32 位喚醒計數(shù)器的 RTC 的強大功能,但我的其他非 lorawan 項目需要一個低成本的 MCU,它也需要這個“帶 3
    發(fā)表于 12-02 06:14

    RTC不均勻

    STM32F103RCT6的RTC不均勻
    發(fā)表于 12-07 18:13 ?0次下載

    STM32F10x _RTC中斷

    STM32F10x_RTC中斷
    的頭像 發(fā)表于 03-25 11:39 ?3374次閱讀
    <b class='flag-5'>STM32</b>F10x _<b class='flag-5'>RTC</b><b class='flag-5'>秒</b>中斷

    STM32F1_ 內(nèi)FLASH編程

    STM32F1_內(nèi)FLASH編程
    的頭像 發(fā)表于 04-08 10:28 ?4095次閱讀
    <b class='flag-5'>STM32</b>F1_ <b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b>FLASH編程

    STM32CubeMX學(xué)習(xí)筆記(14)——RTC實時時鐘使用

    包含二進碼十進數(shù)格式 (BCD) 的、分鐘、小時( 12 或 24 小時制)、星期幾、日期、月份和年份。此外,還可提供二進制格式的值。系統(tǒng)可以自動將月份的天數(shù)補償為 28、29(閏年)、30 和 31 天。只要芯片的備用電
    發(fā)表于 12-05 21:06 ?13次下載
    <b class='flag-5'>STM32</b>CubeMX學(xué)習(xí)筆記(14)——<b class='flag-5'>RTC</b>實時時鐘使用

    STM32F1 使用easyflash操作內(nèi)flash

    STM32F1 使用easyflash操作內(nèi)flash
    發(fā)表于 12-09 10:06 ?15次下載
    <b class='flag-5'>STM32</b>F1 使用easyflash操作<b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b>flash

    STM32內(nèi)RTC特性的應(yīng)用示例(上)

    絕大多數(shù)STM32系列里的RTC都具有【或稱子】計數(shù)單元。為了了解
    的頭像 發(fā)表于 04-30 16:28 ?1071次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b><b class='flag-5'>RTC</b><b class='flag-5'>亞</b><b class='flag-5'>秒</b><b class='flag-5'>特性</b>的應(yīng)用示例(上)

    STM32內(nèi)RTC特性的應(yīng)用示例(下)

    這個專用喚醒定時器,而是想基于ALARM事件和特性來實現(xiàn)上面需求。 對于RTC的ALARM功能我們都不陌生,即先預(yù)設(shè)需要ALARM的時間點,當(dāng)日歷時間跟設(shè)定的ALARM時間匹配時就
    的頭像 發(fā)表于 04-30 16:32 ?1833次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b><b class='flag-5'>RTC</b><b class='flag-5'>亞</b><b class='flag-5'>秒</b><b class='flag-5'>特性</b>的應(yīng)用示例(下)

    STM32系列里RTC特性及功能(上)

    絕大多數(shù)STM32系列里的RTC都具有【或稱子】計數(shù)單元。為了了解
    的頭像 發(fā)表于 06-21 15:53 ?3229次閱讀
    <b class='flag-5'>STM32</b>系列里<b class='flag-5'>RTC</b>的<b class='flag-5'>亞</b><b class='flag-5'>秒</b><b class='flag-5'>特性</b>及功能(上)

    STM32系列里RTC特性及功能(下)

    ,就這樣延續(xù)下去。 這樣操作也是可以的,即每次在ALARM中斷里修改新的ALARM時間點。下圖是對ALARM值進行編程的流程【設(shè)置時先要關(guān)閉ALARM,修改ALARM值后再手動開啟ALARM單元】: 不過,結(jié)合眼前的應(yīng)用需求,我們可以不使用上面的做法,而是巧妙地使用RTC
    的頭像 發(fā)表于 06-21 15:56 ?1621次閱讀
    主站蜘蛛池模板: 亲嘴扒胸摸屁股视频免费网站 | 国产午夜精品理论片在线 | 国产精品九九久久 | 亚洲爆乳无码精品AAA片蜜桃 | 嘟嘟嘟在线视频免费观看高清中文 | 免费毛片播放 | YELLOW免费观看完整视频 | 闺蜜撬开我的腿用黄瓜折磨我 | 印度12 13free| 国产女人与黑人在线播放 | 伊人久久艹 | 日韩亚洲欧美中文高清在线 | 欧美一区二区VA毛片视频 | 国产乱国产乱老熟300部视频 | 伊人青青草| 国产三级在线免费 | 九九热视频这里只有精 | 第七色男人天堂 | 国产成人无码免费精品果冻传媒 | caoporn 超碰免费视频 | 国产一卡在线观看完整版 | 69精品人妻一区二区三区蜜桃 | 果冻传媒在线观看高清完整免费 | 国产精品久久久精品a级小说 | 强奸美女老师 | 久久这里只有精品无码3D | 手机在线观看无码日韩视频 | 青青草国产偷拍在线av | 男人J放进女人屁股免费观看 | 男女无遮挡吃奶gift动态图 | 精品亚洲午夜久久久久 | 亚洲精品无码一区二区三区四虎 | 中国老妇xxxhd | 亚洲高清在线mv | 女人和男人插曲视频大全 | 一边亲着一面膜下的免费过程 | 久久精品国产eeuss | 90后性爱视频 | 国产精品JIZZ在线观看A片 | 美女露出乳胸扒开尿口 | 亚洲永久精品AV在线观看 |