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

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

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

CW32實時時鐘(RTC)介紹(下)

jf_78858299 ? 來源:武漢芯源 ? 作者:武漢芯源 ? 2023-05-26 17:07 ? 次閱讀

4.RTC模塊初始化,ErrorStatus 返回值為SUCCESS或ERROR

ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct)

{

CW_SYSCTRL->APBEN1_f.RTC = 1;            //  啟動RTC外設(shè)時鐘,使能RTC模塊

if ((RCC_GetAllRstFlag() & SYSCTRL_RESETFLAG_POR_Msk) != RCC_FLAG_PORRST)  //不是上電復(fù)位,直接退出

{    

    RCC_ClearRstFlag(RCC_FLAG_ALLRST);        

    return SUCCESS;    

}

RTC_Cmd(DISABLE);                        //  停止RTC,保證正確訪問RTC寄存器

RTC_SetClockSource(RTC_InitStruct->RTC_ClockSource);        // 設(shè)置RTC時鐘源, 用戶需首先啟動RTC時鐘源!?。?/span>

RTC_SetDate(&RTC_InitStruct->DateStruct);// 設(shè)置日期,DAY、MONTH、YEAR必須為BCD方,星期為0~6,代表星期日,星期一至星期六

RTC_SetTime(&RTC_InitStruct->TimeStruct); //時間,HOUR、MINIUTE、SECOND必須為BCD方式,用戶須保證HOUR、AMPM、H24之間的關(guān)聯(lián)正確性

RTC_Cmd(ENABLE);

RCC_ClearRstFlag(RCC_FLAG_ALLRST);  

return SUCCESS;

}

5.RTC周期中斷時間設(shè)置

int RTC_SetInterval(uint8_t Period)

{

uint16_t timeout = 0xffff;



RTC_UNLOCK();

if (IS_RTC_START())         // 如果RTC正在運(yùn)行,則使用WINDOWS、ACCESS訪問

{

    CW_RTC->CR1_f.ACCESS = 1;        

    while ((!CW_RTC->CR1_f.WINDOW) && timeout--);

    if (timeout == 0) return 1;



}

CW_RTC->CR0_f.INTERVAL = Period;

CW_RTC->CR1_f.ACCESS = 0;

RTC_LOCK();

return 0;

}

6.設(shè)置時鐘中斷使能

int RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState)

{

uint16_t timeout = 0xffff;

RTC_UNLOCK();

CW_RTC->CR1_f.ACCESS = 1;

while ((!CW_RTC->CR1_f.WINDOW) && timeout--);

if (timeout == 0) return 1;

if (!NewState)

{

    CW_RTC->IER &= ~RTC_IT;

}

else

{

    CW_RTC->IER |= RTC_IT;

}

CW_RTC->CR1_f.ACCESS = 0;

RTC_LOCK();

return 0;

}

void RTC_IRQHandlerCallBack(void)

{

if (RTC_GetITState(RTC_IT_ALARMA))

{

    RTC_ClearITPendingBit(RTC_IT_ALARMA);

    printf("*********Alarm!!!!\\r\\n");

}

if (RTC_GetITState(RTC_IT_INTERVAL))

{

    RTC_ClearITPendingBit(RTC_IT_INTERVAL);

    ShowTime();

}

void NVIC_Configuration(void)

{

__disable_irq();

NVIC_EnableIRQ(RTC_IRQn);

__enable_irq();

}

7.RTC時鐘測試,初始化日歷,使用間隔中斷0.5秒通過Log輸出日期時間

int32_t main(void)

{

RTC_InitTypeDef RTC_InitStruct = {0};

RTC_AlarmTypeDef RTC_AlarmStruct = {0};

/*系統(tǒng)時鐘配置*/

RCC_Configuration();

/* GPIO 口配置*/

GPIO_Configuration();

LogInit();//配置輸出時間所需GPIO口以及串口UART配置

printf("RTC Init...\\r\\n");

printf(" (RTC CR0:%04x,CR1:%04x,CR2:%04x,RESET FLAG:0x%08x)\\r\\n",CW_RTC->CR0,CW_RTC->CR1,CW_RTC->CR2,CW_SYSCTRL->RESETFLAG);

RCC_LSE_Enable(RCC_LSE_MODE_OSC, RCC_LSE_AMP_NORMAL, RCC_LSE_DRIVER_NORMAL); // 選擇LSE為RTC時鐘

RTC_InitStruct.DateStruct.Day = 0x21; //日

RTC_InitStruct.DateStruct.Month = RTC_Month_June;//月

RTC_InitStruct.DateStruct.Week = RTC_Weekday_Monday;//星期

RTC_InitStruct.DateStruct.Year = 0x21; //年

//設(shè)置日期,DAY、MONTH、YEAR必須為BCD方式,星期為0~6,代表星期日,星期一至星期六

printf("-------Set Date as 20%x/%x/%x\\r\\n", RTC_InitStruct.DateStruct.Year,RTC_InitStruct.DateStruct.Month,RTC_InitStruct.DateStruct.Day);

//打印日期

RTC_InitStruct.TimeStruct.Hour = 0x11; //時

RTC_InitStruct.TimeStruct.Minute = 0x58;//分

RTC_InitStruct.TimeStruct.Second = 0x59;//秒

RTC_InitStruct.TimeStruct.AMPM = 0;

RTC_InitStruct.TimeStruct.H24 = 0; //采用12小時設(shè)置

//設(shè)置時間,HOUR、MINIUTE、SECOND必須為BCD方式,用戶須保證HOUR、AMPM、H24之間的關(guān)聯(lián)正確性

printf("-------Set Time as %02x:%02x:%02x\\r\\n", RTC_InitStruct.TimeStruct.Hour,RTC_InitStruct.TimeStruct.Minute,RTC_InitStruct.TimeStruct.Second);//打印時間

RTC_InitStruct.RTC_ClockSource = RTC_RTCCLK_FROM_LSE;

RTC_Init(&RTC_InitStruct); // RTC模塊初始化, 用戶需選定需要使用的時鐘源

printf("=====Set interval period as 0.5s...\\r\\n");

RTC_SetInterval(RTC_INTERVAL_EVERY_0_5S);

//鬧鐘為工作日上午的6:45

RTC_AlarmStruct.RTC_AlarmMask = RTC_AlarmMask_WeekMON | RTC_AlarmMask_WeekTUE |

RTC_AlarmMask_WeekWED | RTC_AlarmMask_WeekTHU |RTC_AlarmMask_WeekFRI;

//設(shè)定時間為周一到周五

RTC_AlarmStruct.RTC_AlarmTime.Hour = 6;

RTC_AlarmStruct.RTC_AlarmTime.Minute = 0x45;

RTC_AlarmStruct.RTC_AlarmTime.Second = 0;

RTC_SetAlarm(RTC_Alarm_A, &RTC_AlarmStruct); // 設(shè)置鬧鐘,BCD格式

RTC_AlarmCmd(RTC_Alarm_A, ENABLE);//使能鬧鐘

printf("=====Enable ALRAMA and INTERVAL IT...\\r\\n");

RTC_ITConfig(RTC_IT_ALARMA | RTC_IT_INTERVAL, ENABLE);

//設(shè)置中斷使能

While(1){}

}

8.通過UART串口驗證RTC工作正常

圖片

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

    關(guān)注

    4

    文章

    233

    瀏覽量

    65611
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

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

    關(guān)注

    5

    文章

    894

    瀏覽量

    41322
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3228

    瀏覽量

    114160
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    172

    瀏覽量

    526
  • 武漢芯源
    +關(guān)注

    關(guān)注

    1

    文章

    63

    瀏覽量

    231
收藏 人收藏

    評論

    相關(guān)推薦

    STM32 RTC實時時鐘(一)

    STM32處理器內(nèi)部集成了實時時鐘控制器(RTC),因此在實現(xiàn)實時時鐘功能時,無須外擴(kuò)時鐘芯片即可構(gòu)建實時時鐘系統(tǒng)。
    的頭像 發(fā)表于 07-22 15:41 ?4415次閱讀
    STM32 <b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>(一)

    什么是實時時鐘RTC)?如何更改RTC的時間?

    什么是實時時鐘RTC)?實時時鐘RTC)的基本功能是什么?實時時鐘RTC)晶體誤差的主要來
    發(fā)表于 07-19 08:44

    實時時鐘RTC)簡要介紹

    實時時鐘RTC)是什么?實時時鐘RTC的寄存器有哪些?
    發(fā)表于 10-09 07:08

    RTC實時時鐘怎么使用?

    RTC實時時鐘怎么使用?cubemx中如何配置RTC?如何在keil中編寫程序?
    發(fā)表于 01-18 07:33

    RTC實時時鐘實驗的相關(guān)資料分享

    的價值非常大,因此在這里介紹RTC的使用。只要添加一顆紐扣電池即可實時顯示單片機(jī)的時間,即使是斷點(diǎn)了也可以在下次上電的時候繼續(xù)顯示實時時
    發(fā)表于 03-02 07:34

    HT49 MCU RTC實時時鐘)的使用介紹

    HT49 MCU RTC實時時鐘)的使用介紹文件編碼:HA0024s本文主要介紹HT49 系列單片機(jī)實時時鐘的使用方法。簡單
    發(fā)表于 03-26 08:37 ?12次下載

    一文看懂rtc實時時鐘和單片機(jī)時鐘的區(qū)別

    本文首先闡述了rtc實時時鐘和單片機(jī)時鐘的區(qū)別,其次介紹了單片機(jī)中時鐘概念與單片機(jī)內(nèi)外部時鐘方式
    的頭像 發(fā)表于 05-14 15:48 ?6.1w次閱讀

    淺談RTC實時時鐘特征與原理

    一、RTC實時時鐘特征與原理 查看STM32中文手冊 16 實時時鐘RTC)(308頁) RTC (Real Time Clock):
    的頭像 發(fā)表于 06-30 15:54 ?1.1w次閱讀

    STM32CubeMX | 40 - 實時時鐘RTC的使用(日歷和鬧鐘)

    STM32CubeMX | 40 - 實時時鐘RTC的使用(日歷和鬧鐘)
    發(fā)表于 11-23 18:06 ?19次下載
    STM32CubeMX | 40 - <b class='flag-5'>實時時鐘</b><b class='flag-5'>RTC</b>的使用(日歷和鬧鐘)

    STM32CubeMX系列|RTC實時時鐘

    RTC實時時鐘1. RTC實時時鐘簡介2. 硬件設(shè)計3. 軟件設(shè)計3.1 STM32CubeMX設(shè)置3.2 MDK-ARM編程4. 下載驗證
    發(fā)表于 12-24 19:15 ?16次下載
    STM32CubeMX系列|<b class='flag-5'>RTC</b><b class='flag-5'>實時時鐘</b>

    DA1468x SoC 的實時時鐘(RTC) 概念

    DA1468x SoC 的實時時鐘 (RTC) 概念
    發(fā)表于 03-15 20:16 ?0次下載
    DA1468x SoC 的<b class='flag-5'>實時時鐘</b>(<b class='flag-5'>RTC</b>) 概念

    實時時鐘RTC:32.768kHz晶振

    實時時鐘(RTC: Real-Time Clock)是集成電路,通常稱為時鐘芯片。目前實時時鐘芯片大多采用精度較高的晶體振蕩器作為時鐘源。
    的頭像 發(fā)表于 05-08 10:45 ?2571次閱讀
    <b class='flag-5'>實時時鐘</b><b class='flag-5'>RTC</b>:32.768kHz晶振

    CW32實時時鐘RTC介紹(上)

    實時時鐘RTC)是一個專用的計數(shù)器 / 定時器,可提供日歷信息,包括小時、分鐘、秒、日、月份、年份以及星期。RTC 具有兩個獨(dú)立鬧鐘,時間、日期可組合設(shè)定,可產(chǎn)生鬧鐘中斷,并通過引腳輸出;支持時間
    的頭像 發(fā)表于 05-26 17:07 ?1500次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>實時時鐘</b>(<b class='flag-5'>RTC</b>)<b class='flag-5'>介紹</b>(上)

    DA1468x SoC 的實時時鐘(RTC) 概念

    DA1468x SoC 的實時時鐘 (RTC) 概念
    發(fā)表于 07-06 19:27 ?0次下載
    DA1468x SoC 的<b class='flag-5'>實時時鐘</b>(<b class='flag-5'>RTC</b>) 概念

    CW32實時時鐘RTC介紹

    CW32實時時鐘RTC介紹
    的頭像 發(fā)表于 10-24 15:36 ?1019次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>實時時鐘</b>(<b class='flag-5'>RTC</b>)<b class='flag-5'>介紹</b>