RM新时代网站-首页

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

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

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

STM32 RTC Alarm的使用

CHANBAEK ? 來(lái)源:EEMaker電子創(chuàng)客營(yíng) ? 作者: DK45王 ? 2023-10-24 14:30 ? 次閱讀

STM32F072CB做的測(cè)試

官方參考應(yīng)用文檔:AN4759

RTC日歷時(shí)鐘配置

通過(guò)兩個(gè)預(yù)分頻得到1hz的時(shí)鐘用來(lái)更新日歷。

  • 異步預(yù)分頻:PREDIV_A,7-bit(0-127)
  • 同步預(yù)分頻:PREDIV_S,15-bit(0-32767)

頻率計(jì)算公式如下:

Fck=Frtcclk/((PREDIV_A-1)*(PREDIV_S-1))

所以計(jì)算出PREDIV_A和PREDIV_S的值在配置時(shí)記得減1。

配置舉例:

  • 比如選擇LSI=40khz作為RTC的時(shí)鐘源,要產(chǎn)生1hz的時(shí)鐘,就可以配置PREDIV_A=39,PREDIV_S=999
  • 比如選擇LSE=32.768khz作為RTC的時(shí)鐘源,要產(chǎn)生1hz的時(shí)鐘,可以配置PREDIV_A=127,PREDIV_S=255

為了產(chǎn)生1hz的時(shí)鐘,分頻值可以有多種組合,上面兩種只是舉例。如果用到alarm也要考慮下面描述的alarm子秒配置。

目標(biāo)是產(chǎn)生1hz的時(shí)鐘,當(dāng)然也可以分頻產(chǎn)生非1hz的時(shí)鐘,只是那樣RTC的日歷不準(zhǔn)而已。

RTC alarm

圖片

設(shè)定Alarm可以配置多種對(duì)比域,每一個(gè)都可以單獨(dú)被屏蔽:

  • 日期或者星期(二選一)
  • 小時(shí)
  • 分鐘
  • 子秒(根據(jù)PREDIV_S預(yù)分頻的值來(lái)確定分辨率)

這些參數(shù)分為兩個(gè)寄存器來(lái)進(jìn)行配置,一個(gè)是RTC_ALRMAR,另一個(gè)是RTC_ALRMASSR(這個(gè)專門(mén)負(fù)責(zé)子秒的alarm配置)

配置舉例

  • 比如我現(xiàn)在只想在子秒匹配時(shí)候產(chǎn)生alarm,那么Mask4、Mask3、Mask2、Mask1位全部設(shè)置為1,正確配置Mask ss的值。
  • 在30分40秒的時(shí)候產(chǎn)生alarm,就把Mask2和Mask1設(shè)置為0,其他屏蔽位都配置為1。并把分的對(duì)比值設(shè)置為30,秒的對(duì)比值設(shè)置為40

Alarm 子秒的配置

圖片

RTC alarm的日期、時(shí)、分、秒的比較值配置都比較簡(jiǎn)單,而子秒的配置就會(huì)稍微復(fù)雜一點(diǎn)。

子秒的比較值是在RTC_ALARMASSR中進(jìn)行設(shè)置,對(duì)比的對(duì)象是RTC_SSR。

RTC_SSR是子秒的計(jì)數(shù)器,他的分辨率為:1/(PREDIV_S+1)秒,并且是向下計(jì)數(shù)的,當(dāng)值減到0以后會(huì)重裝載RTC_SPRE中的PREDIV_S。

alarm子秒配置舉例:

首先確定RTC時(shí)鐘源,比如使用的是LSI=40KHZ。

可以配置PREDIV_A=39,PREDIV_S=999 就可以獲得日歷1秒鐘的時(shí)鐘。

這樣子秒的分辨率就為:1sec/(999+1)=1ms

alarm子秒的Mask位:

子秒的Mask位是使用了4bit,位于RTC_ALARMASSR[27:24],設(shè)置不同值會(huì)屏蔽不同的對(duì)比位,具體如下表。如果我們要子秒完全和RTC_SSR值進(jìn)行對(duì)比,就配置MASKSS[3:0]=15

圖片

RTC Alarm stm32cubemx配置:

激活日歷和Alarm:

圖片

配置兩個(gè)分頻值(要根據(jù)時(shí)鐘源計(jì)算)

圖片

設(shè)置Alarm相關(guān)的參數(shù),這個(gè)要根據(jù)自己實(shí)際情況來(lái)配置。比如我只讓子秒進(jìn)行對(duì)比,日期、時(shí)、分、秒的屏蔽位都給使能了。設(shè)置的Sub Seconds值貌似是cubemx的一個(gè)bug,范圍只允許0-59。所以生成工程以后我在代碼里面手動(dòng)改成了999

圖片

把RTC的中斷給使能了,讓Alarm可以產(chǎn)生中斷

圖片

時(shí)鐘配置不要忘記做選擇,這里我使用LSI

圖片

生成MDK工程編寫(xiě)代碼

rtc.c中這里我手動(dòng)修改成了999

圖片

測(cè)試代碼主要就是寫(xiě)一個(gè)RTC的中斷回調(diào)函數(shù)放在main.c中就可以,在觸發(fā)alarm的時(shí)候翻轉(zhuǎn)LED

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)‘

{

  HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);

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

    關(guān)注

    2269

    文章

    10890

    瀏覽量

    355577
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1730

    瀏覽量

    131434
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    895

    瀏覽量

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

    關(guān)注

    2

    文章

    537

    瀏覽量

    66433
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    87

    瀏覽量

    11553
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32F103正點(diǎn)RTC RTC_Alarm_Set不能作用是為什么?

    STM32F103正點(diǎn)RTC RTC_Alarm_Set根本不能作用
    發(fā)表于 04-08 07:28

    stm32alarm觸發(fā)不是按照我程序設(shè)定的

    最近一直在玩STM32,但是遇到了一些問(wèn)題,看看大家能不能幫幫忙。我編寫(xiě)的stm32程序執(zhí)行過(guò)程是這樣的:stm32處于stop低功耗模式,每次由RTC
    發(fā)表于 03-28 15:33

    stm32l0 rtc WakeupTimer 和 alarm設(shè)置問(wèn)題

    目前我在學(xué)習(xí)用 stm32 的低功耗模式,打算通過(guò)wakerup timer 或 alarm 來(lái)喚醒?,F(xiàn)在對(duì)這兩項(xiàng)功能還有些疑惑:wakeup timer喚醒mcu后,是否可以操作wakeup
    發(fā)表于 02-02 19:52

    教你使用RT-Thread開(kāi)啟STM32H7系列的RTCAlarm組件

    背景【ART-PI】默認(rèn)沒(méi)有開(kāi)啟Alarm組件,嘗試適配并開(kāi)啟有部分工程師想使用RT-Thread 基于STM32H7系列的RTCAlarm(鬧鐘功能)驗(yàn)證平臺(tái)Keil MDK5
    發(fā)表于 03-16 14:05

    淺談基于Apollo3平臺(tái)Alarm組件的移植

    ;rtdbg.h> static struct rt_rtc_device rtc_device; #ifdef RT_USING_ALARM靜態(tài) rt_err_t
    發(fā)表于 03-21 10:52

    STM32L431 RTC設(shè)置和Alarm callback時(shí)區(qū)不一致是為什么?

    ALarm配置好后一直無(wú)法進(jìn)入callback函數(shù),后來(lái)發(fā)現(xiàn)是alarm函數(shù)的時(shí)間是UTC時(shí)間,但是在排除了這個(gè)問(wèn)題后發(fā)現(xiàn)依然無(wú)法進(jìn)入call back函數(shù),看了下社區(qū)不止我一個(gè)STM32L4的有類似問(wèn)題
    發(fā)表于 05-26 14:58

    分析在RTT中RTC alarm文件的實(shí)現(xiàn)方法

    ;_container.event, 1);}4. 這樣,只要在驅(qū)動(dòng)drv_rtc.c添加相應(yīng)的配置代碼,實(shí)驗(yàn)alarm功能即可完成alarm.c的功能。配合stm32
    發(fā)表于 07-22 10:49

    RTC alarm組件不能進(jìn)入回調(diào)函數(shù)該怎樣去解決呢

    芯片類型stm32F407ZGT6,用rt threadstudio進(jìn)行調(diào)試,rtthread 版本用的是4.0.3,studio中seting 設(shè)置開(kāi)啟rtc驅(qū)動(dòng)組件和alarm驅(qū)動(dòng)組件
    發(fā)表于 08-17 12:21

    基于STM32F1的RTCAlarm(鬧鐘功能)實(shí)現(xiàn)定時(shí)控制的要求

    功能背景想使用RT-Thread 基于STM32F1系列的RTCAlarm(鬧鐘功能)實(shí)現(xiàn)項(xiàng)目定時(shí)控制的要求。實(shí)現(xiàn)環(huán)境WIN10操作系統(tǒng)、RT-Thread Studio2.1.0
    發(fā)表于 09-15 14:42

    STM32L431 RTC設(shè)置和Alarm callback時(shí)區(qū)不一致怎么辦呢

    alarm函數(shù)的時(shí)間是UTC時(shí)間,但是在排除了這個(gè)問(wèn)題后發(fā)現(xiàn)依然無(wú)法進(jìn)入call back函數(shù),看了下社區(qū)不止我一個(gè)STM32L4的有類似問(wèn)題;而且date set_date set_time等設(shè)置時(shí)間的函數(shù)都是帶時(shí)區(qū)設(shè)置的,這一點(diǎn)不知道后期版本能否統(tǒng)一,否則在涉及到按
    發(fā)表于 11-02 11:55

    RTC alarm組件不進(jìn)入回調(diào)函數(shù)的原因是什么?

    芯片類型stm32F407ZGT6,用rt threadstudio進(jìn)行調(diào)試,rtthread 版本用的是4.0.3,studio中seting 設(shè)置開(kāi)啟rtc驅(qū)動(dòng)組件和alarm驅(qū)動(dòng)組件
    發(fā)表于 05-17 14:14

    RTCalarm中斷事件能否喚醒standby或者shutdown模式?

    274頁(yè)中有描述: 文檔中是可以用RTC的中斷事件來(lái)喚醒的。但是我在工程中配置好的PWR、RTC,卻喚醒不了。只能在stop模式下喚醒。 查閱了RM0490《STM32C0x1 advanced
    發(fā)表于 08-08 07:22

    STM32單片機(jī)RTC時(shí)鐘的使用方法及步驟

    STM32RTC使用步驟: 打開(kāi)PWR時(shí)鐘和Backup區(qū)數(shù)據(jù)訪問(wèn) 若使用外部低速時(shí)鐘(LSE),打開(kāi)LSE并等待起振 選擇和打開(kāi)RTC時(shí)鐘,等待時(shí)鐘同步 配置時(shí)間格式,分頻
    發(fā)表于 02-11 10:00 ?3.5w次閱讀
    <b class='flag-5'>STM32</b>單片機(jī)<b class='flag-5'>RTC</b>時(shí)鐘的使用方法及步驟

    RT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用

    RT-Thread 應(yīng)用筆記 - 不正確使用LOG也會(huì)引發(fā)hard faultRT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用RT-Thread 應(yīng)用筆記 - freemodbus RT...
    發(fā)表于 01-25 18:18 ?10次下載
    RT-Thread 應(yīng)用筆記 - <b class='flag-5'>RTC</b> <b class='flag-5'>Alarm</b> 組件的使用

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

    不過(guò),今天主要想聊聊如何通過(guò)RTC來(lái)實(shí)現(xiàn)該需求。了解STM32RTC的人可能知道,RTC模塊往往還自帶一個(gè)專門(mén)的16位向下計(jì)數(shù)的喚醒定時(shí)器,即下面
    的頭像 發(fā)表于 04-30 16:32 ?1653次閱讀
    <b class='flag-5'>STM32</b>片內(nèi)<b class='flag-5'>RTC</b>亞秒特性的應(yīng)用示例(下)
    RM新时代网站-首页