MCU微課堂
CKS32F107xx 備份寄存器
第五十一期 2025.02.18
鬧鐘實(shí)驗(yàn)
本小節(jié)講解的是如何在萬年歷實(shí)驗(yàn)的基礎(chǔ)上,利用RTC的鬧鐘功能實(shí)現(xiàn)一個(gè)鬧鐘,在每天的[XX小時(shí)-XX分鐘-XX秒]產(chǎn)生鬧鐘,然后通過閃爍LED模擬鬧鐘響效果。
程序設(shè)計(jì)要點(diǎn)
(1)初始化RTC外設(shè),設(shè)置RTC初始時(shí)間;
(2)編程鬧鐘,設(shè)置鬧鐘時(shí)間;
(3)編寫鬧鐘中斷服務(wù)函數(shù);
代碼分析
鬧鐘實(shí)驗(yàn)是在萬年歷實(shí)驗(yàn)的基礎(chǔ)上添加,相同部分的代碼不再講解,這里只講解鬧鐘相關(guān)的代碼,更加具體的請(qǐng)參考鬧鐘實(shí)驗(yàn)的工程源碼。
(1)鬧鐘相關(guān)宏定義(與萬年歷實(shí)驗(yàn)相同)
(2)初始化RTC
在本工程中,除了用RTC_ITConfig使能秒中斷外,還需要補(bǔ)充使鬧鐘中斷RTC_IT_ALR。
/*
* 函數(shù)名:RTC_Configuration
* 描述 :配置RTC
* 輸入 :無
* 輸出 :無
*/
void RTC_Configuration(void)
{
……
RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR, ENABLE);//使能 RTC 秒中斷和鬧鐘中斷
……
}
(3)設(shè)置默認(rèn)鬧鐘時(shí)間結(jié)構(gòu)體
系統(tǒng)默認(rèn)的鬧鐘觸發(fā)時(shí)間是在斷電開機(jī)后的第8秒,因此系統(tǒng)默認(rèn)時(shí)間和鬧鐘時(shí)間結(jié)構(gòu)體設(shè)置如下。
/*時(shí)間結(jié)構(gòu)體,默認(rèn)時(shí)間2000-01-01 0000*/
struct rtc_time systmtime=
{
0,0,0,1,1,2000,0
};
/*時(shí)間結(jié)構(gòu)體,鬧鐘時(shí)間2000-01-01 0008*/
struct rtc_time clocktime=
{
8,0,0,1,1,2000,0
};
(4)鬧鐘中斷服務(wù)函數(shù)
本實(shí)驗(yàn)中的RTC中斷服務(wù)函數(shù)在萬年歷實(shí)驗(yàn)的基礎(chǔ)上,增加了判斷鬧鐘中斷的分支,如果發(fā)生鬧鐘中斷,則將鬧鐘響標(biāo)志TimeAlarm置1,然后通過翻轉(zhuǎn)LED指示燈模擬鬧鐘響的效果。
void RTC_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)//秒中斷
{
RTC_ClearITPendingBit(RTC_IT_SEC);//清中斷標(biāo)志
TimeDisplay = 1;//置位秒顯示更新任務(wù)標(biāo)志
RTC_WaitForLastTask();//等待RTC操作完成
}
if (RTC_GetITStatus(RTC_IT_ALR) != RESET)//鬧鐘中斷
{
RTC_ClearITPendingBit(RTC_IT_ALR);//清中斷標(biāo)志
TimeAlarm = 1 ;//鬧鐘響標(biāo)志
}
if( TimeAlarm == 1)
{
GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN);//鬧鐘響翻轉(zhuǎn)LED
}
}
(5)main函數(shù)
main函數(shù)在萬年歷實(shí)驗(yàn)基礎(chǔ)上,增加了LED初始化和鬧鐘設(shè)置的部分,其余部分相同。在初始化RTC結(jié)束之后,進(jìn)行鬧鐘設(shè)置,把鬧鐘時(shí)間結(jié)構(gòu)體通過mktimev函數(shù)轉(zhuǎn)換成UNIX時(shí)間戳,再減去北京時(shí)區(qū)的偏移,寫入鬧鐘寄存器。
int main()
{
……
LED_GPIO_Config();
……
clock_timestamp = mktimev(&clocktime) - TIME_ZOOM; //計(jì)算鬧鐘時(shí)間戳
RTC_SetAlarm(clock_timestamp);//寫入鬧鐘寄存器
……
while (1)
{
……
}
}
把編譯好的程序下載到開發(fā)板,當(dāng)日歷時(shí)間到了鬧鐘時(shí)間時(shí),開發(fā)板LED4會(huì)開始閃爍,但日歷會(huì)繼續(xù)運(yùn)行。
-
寄存器
+關(guān)注
關(guān)注
31文章
5386瀏覽量
121459 -
鬧鐘
+關(guān)注
關(guān)注
0文章
78瀏覽量
27153 -
萬年歷
+關(guān)注
關(guān)注
3文章
189瀏覽量
24006 -
RTC
+關(guān)注
關(guān)注
2文章
548瀏覽量
67182
原文標(biāo)題:MCU微課堂|CKS32F107xx 備份寄存器
文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
CKS32F4xx系列產(chǎn)品串口DMA傳輸
CKS32F4xx系列RNG功能設(shè)置

CKS32F107xx系列時(shí)鐘系統(tǒng)具體配置方法講解

CKS32F107xx系列MCU中ADC介紹
CKS32F107xx系列MCU的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

詳解CKS32F107xx系列的定時(shí)器同步功能

評(píng)論