以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);
}
-
STM32
+關(guān)注
關(guān)注
2269文章
10890瀏覽量
355577 -
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1730瀏覽量
131434 -
中斷
+關(guān)注
關(guān)注
5文章
895瀏覽量
41461 -
RTC
+關(guān)注
關(guān)注
2文章
537瀏覽量
66433 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11553
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論