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

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

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

RA6M3 HMI Board 之RTC實(shí)踐

嵌入式大雜燴 ? 來(lái)源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-21 21:31 ? 次閱讀

開(kāi)發(fā)環(huán)境:

RT-Thread Studio:v2.2.6

開(kāi)發(fā)板:RA6M3 HMI Board開(kāi)發(fā)板

MCU:R7FA6M3AH3CFB

1 RA6M3 RTC簡(jiǎn)介

R7FA6M3 的RTC(Real Time Clock)外設(shè),實(shí)質(zhì)是一個(gè)掉電后還繼續(xù)運(yùn)行的定時(shí)器。從定時(shí)器的角度來(lái)說(shuō),相對(duì)于GPT外設(shè),要簡(jiǎn)單很多 ,只有計(jì)時(shí)和觸發(fā)中斷以及輸入捕獲的功能。RTC外設(shè)的特別之處并不在于它的定時(shí)功能,而在于它掉電還繼續(xù)運(yùn)行的特性。

1687354145569s3ufti9iih

2 RT-Thread 的RTC簡(jiǎn)介

RTC (Real-Time Clock)實(shí)時(shí)時(shí)鐘可以提供精確的實(shí)時(shí)時(shí)間,它可以用于產(chǎn)生年、月、日、時(shí)、分、秒等信息。目前實(shí)時(shí)時(shí)鐘芯片大多采用精度較高的晶體振蕩器作為時(shí)鐘源。有些時(shí)鐘芯片為了在主電源掉電時(shí)還可以工作,會(huì)外加電池供電,使時(shí)間信息一直保持有效。

在開(kāi)啟 RTC 設(shè)備框架以及 RTC 驅(qū)動(dòng)之后,應(yīng)用程序通過(guò) RT-Thread 提供的 RTC設(shè)備管理接口來(lái)訪問(wèn) RTC 硬件,相關(guān)接口如下所示:

函數(shù) 描述
rt_device_find() 根據(jù) RTC設(shè)備名稱(chēng)查找設(shè)備獲取設(shè)備句柄
set_date() 設(shè)置日期,年、月、日(當(dāng)?shù)貢r(shí)區(qū))
set_time() 設(shè)置時(shí)間,時(shí)、分、秒(當(dāng)?shù)貢r(shí)區(qū))

另外,alarm 鬧鐘功能是基于 RTC 設(shè)備實(shí)現(xiàn)的,根據(jù)用戶(hù)設(shè)定的鬧鐘時(shí)間,當(dāng)時(shí)間到時(shí)觸發(fā) alarm 中斷,執(zhí)行鬧鐘事件。

alarm 組件提供的接口如下所示:

函數(shù) 描述
rt_alarm_create() 創(chuàng)建鬧鐘
rt_alarm_start() 啟動(dòng)鬧鐘
rt_alarm_stop() 停止鬧鐘
rt_alarm_delete() 刪除鬧鐘
rt_alarm_control() 控制alarm設(shè)備
rt_alarm_dump() 打印顯示設(shè)置的鬧鐘信息

關(guān)于RTC的更多資料請(qǐng)參看RT-Thread官方手冊(cè):

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc

3 RA6M3 RTC配置

接下來(lái)配置RTC,只需要簡(jiǎn)單配置就可使用。雙擊工程中的 RA Smart Configurator 圖標(biāo),第一次打開(kāi)需要配置正確的 FSP 安裝路徑。

16873541462029xkwqaqxyz

16873541464403ffa5u9gew

  • FSP配置RTC

1.添加 RTC 設(shè)備

1687354146762bi05cijzcm

2.配置 RTC

1687354147144rqac80kifa

RT-Thread 中只是用了一個(gè) RTC 設(shè)備,所以沒(méi)有對(duì)其進(jìn)行編號(hào),如果是新創(chuàng)建的 RTC 設(shè)備需要注意 name 字段,在驅(qū)動(dòng)中默認(rèn)使用的是g_rtc,不然編譯會(huì)提示沒(méi)有相應(yīng)的設(shè)備,修改 Callback 為 rtc_callback。

  • 配置RTC和alarm組件

然后打開(kāi)對(duì)應(yīng)的通道

1687354147528bk0ae6r22e

同時(shí)打開(kāi)alarm組件。

1687354147790iwqe13x0vj

4 RTC代碼實(shí)現(xiàn)

首先設(shè)置了年月日時(shí)分秒信息,然后獲取當(dāng)前時(shí)間,接著設(shè)置一個(gè)alarm,值得注意的是,alarm是基于RTC的,因此需要先將RTC初始化,然后才能開(kāi)啟alarm事件。核心代碼如下:

#include < rtthread.h >
#include < rtdevice.h >
#include < time.h >

#define DBG_LEVEL DBG_LOG
#define DBG_SECTION_NAME "rtc"
#include < rtdbg.h >

#define RTC_NAME "rtc"

rt_sem_t rtc_init_sem = RT_NULL;

static int uesr_rtc_init(void)
{
    rt_err_t ret = RT_EOK;
    time_t now;
    rt_device_t device = RT_NULL;

    /*創(chuàng)建初始化完成信號(hào)量*/
    rtc_init_sem = rt_sem_create("rtc init flag", 0, 0);
    if(rtc_init_sem == RT_NULL)
    {
        rt_kprintf("rtc sem init failed!");
        return RT_ERROR;
    }
    /*尋找設(shè)備*/
    device = rt_device_find(RTC_NAME);
    if (!device)
    {
        rt_kprintf("find %s failed!", RTC_NAME);
        return RT_ERROR;
    }
    /*初始化RTC設(shè)備*/
    if(rt_device_open(device, 0) != RT_EOK)
    {
        rt_kprintf("open %s failed!", RTC_NAME);
        return RT_ERROR;
    }
    /* 設(shè)置日期 */
    ret = set_date(2023, 06, 21);
    if (ret != RT_EOK)
    {
        rt_kprintf("set RTC date failed\\n");
        return ret;
    }

    /* 設(shè)置時(shí)間 */
    ret = set_time(20, 57, 50);
    if (ret != RT_EOK)
    {
        rt_kprintf("set RTC time failed\\n");
        return ret;
    }

    rt_sem_release(rtc_init_sem);
    /* 獲取時(shí)間 */
    now = time(RT_NULL);
    rt_kprintf("RTC device init success,now time is %s\\n", ctime(&now));

    return ret;
}

/*作為用戶(hù)APP初始化*/
INIT_APP_EXPORT(uesr_rtc_init);

static time_t now;

void user_alarm_callback(rt_alarm_t alarm, time_t timestamp)
{
    now = time(RT_NULL);
    rt_kprintf("The alarm clock rings, now time is %s\\n", ctime(&now));
    rt_alarm_stop(alarm);
}

void alarm_test(void)
{
    if(rt_sem_trytake(rtc_init_sem) != RT_EOK)
    {
        rt_kprintf("please init rtc first");
        return ;
    }
    struct rt_alarm_setup setup;
    struct rt_alarm * alarm = RT_NULL;
    static time_t now;
    struct tm p_tm;

    if (alarm != RT_NULL)
        return;

    /*獲取當(dāng)前時(shí)間戳,并把下一秒時(shí)間設(shè)置為鬧鐘時(shí)間 */
    now = time(NULL) + 5;
    gmtime_r(&now,&p_tm);

    setup.flag = RT_ALARM_SECOND;
    setup.wktime.tm_year = p_tm.tm_year;
    setup.wktime.tm_mon = p_tm.tm_mon;
    setup.wktime.tm_mday = p_tm.tm_mday;
    setup.wktime.tm_wday = p_tm.tm_wday;
    setup.wktime.tm_hour = p_tm.tm_hour;
    setup.wktime.tm_min = p_tm.tm_min;
    setup.wktime.tm_sec = p_tm.tm_sec;
    alarm = rt_alarm_create(user_alarm_callback, &setup);
    if(RT_NULL != alarm)
    {
        rt_alarm_start(alarm);
    }
}

/*export msh cmd*/
MSH_CMD_EXPORT(alarm_test,a alarm test);

5 測(cè)試驗(yàn)證

編譯下載,調(diào)試信息如下:

1687354148106fiqkq027nj

從以上打印信息可以看出,rtc已經(jīng)使能,然后使用MSH命令‘a(chǎn)larm_test’即可使能RTC線程,并且執(zhí)行相應(yīng)的事件。

聲明:本文內(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)投訴
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

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

    關(guān)注

    2

    文章

    511

    瀏覽量

    65897
  • GPT
    GPT
    +關(guān)注

    關(guān)注

    0

    文章

    347

    瀏覽量

    15179
  • RA6M3
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    58
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RA6M3 HMI BoardSDHI測(cè)評(píng)實(shí)踐步驟

    首先對(duì)SDHI和SDIO本質(zhì)上的區(qū)別進(jìn)行說(shuō)明,然后使用RT-Studio新建工程進(jìn)行開(kāi)發(fā),通過(guò)RASC對(duì)RA6M3的底層硬件配置,然后使用SDHI接口實(shí)現(xiàn)SD的識(shí)別,搭配文件系統(tǒng)對(duì)SD卡進(jìn)行讀寫(xiě)操作,同時(shí)記錄開(kāi)發(fā)遇到的問(wèn)題。
    的頭像 發(fā)表于 08-07 15:54 ?1023次閱讀
    <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b><b class='flag-5'>之</b>SDHI測(cè)評(píng)<b class='flag-5'>實(shí)踐</b>步驟

    如何利用rt-thread和HMI Board RA6M3開(kāi)發(fā)一套物聯(lián)網(wǎng)工控機(jī)?

    近年來(lái),隨著新一輪的科技發(fā)展以及工業(yè)產(chǎn)業(yè)升級(jí),工業(yè)經(jīng)濟(jì)慢慢的由數(shù)字化向網(wǎng)絡(luò)化和智能化發(fā)展。基于這一理念,本人利用rt-thread和HMI Board RA6M3開(kāi)發(fā)了一套物聯(lián)網(wǎng)工控機(jī)。
    的頭像 發(fā)表于 09-15 15:27 ?1298次閱讀
    如何利用rt-thread和<b class='flag-5'>HMI</b> <b class='flag-5'>Board</b> <b class='flag-5'>RA6M3</b>開(kāi)發(fā)一套物聯(lián)網(wǎng)工控機(jī)?

    RA6M3 HMI Board評(píng)測(cè)挑戰(zhàn)】-瑞薩RA6M3上的CAN實(shí)踐

    RA6M3 HMI Board 評(píng)測(cè)大挑戰(zhàn)】-瑞薩RA6M3上的CAN實(shí)踐
    的頭像 發(fā)表于 10-17 14:55 ?1586次閱讀
    【<b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>評(píng)測(cè)挑戰(zhàn)】-瑞薩<b class='flag-5'>RA6M3</b>上的CAN<b class='flag-5'>實(shí)踐</b>

    RA6M3數(shù)據(jù)手冊(cè)(英)

    RA6M3數(shù)據(jù)手冊(cè)(英)
    發(fā)表于 11-07 19:49 ?0次下載
    <b class='flag-5'>RA6M3</b>數(shù)據(jù)手冊(cè)(英)

    RA6M3硬件用戶(hù)手冊(cè)(英)

    RA6M3硬件用戶(hù)手冊(cè)(英)
    發(fā)表于 11-07 19:49 ?0次下載
    <b class='flag-5'>RA6M3</b>硬件用戶(hù)手冊(cè)(英)

    RA6M3數(shù)據(jù)手冊(cè)(中英)

    RA6M3數(shù)據(jù)手冊(cè)(中英)
    發(fā)表于 11-07 19:49 ?0次下載
    <b class='flag-5'>RA6M3</b>數(shù)據(jù)手冊(cè)(中英)

    RA6M3 組用戶(hù)手冊(cè):硬件

    RA6M3 組用戶(hù)手冊(cè):硬件
    發(fā)表于 05-12 19:25 ?0次下載
    <b class='flag-5'>RA6M3</b> 組用戶(hù)手冊(cè):硬件

    RA6M3 組數(shù)據(jù)表

    RA6M3 組數(shù)據(jù)表
    發(fā)表于 05-12 19:25 ?0次下載
    <b class='flag-5'>RA6M3</b> 組數(shù)據(jù)表

    RA6M3 HMI Board SDHI實(shí)踐

    進(jìn)行說(shuō)明,然后使用RT-Studio新建工程進(jìn)行開(kāi)發(fā),通過(guò)RASC對(duì)RA6M3的底層硬件配置,然后使用SDHI接口實(shí)現(xiàn)SD的識(shí)別,搭配文件系統(tǒng)對(duì)SD卡進(jìn)行讀寫(xiě)操作,同時(shí)記錄開(kāi)發(fā)遇到的問(wèn)題。 1.2
    的頭像 發(fā)表于 06-19 18:15 ?876次閱讀
    <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b> <b class='flag-5'>之</b>SDHI<b class='flag-5'>實(shí)踐</b>

    RA6M3 組用戶(hù)手冊(cè):硬件

    RA6M3 組用戶(hù)手冊(cè):硬件
    發(fā)表于 06-29 19:17 ?0次下載
    <b class='flag-5'>RA6M3</b> 組用戶(hù)手冊(cè):硬件

    RA6M3 組數(shù)據(jù)表

    RA6M3 組數(shù)據(jù)表
    發(fā)表于 06-29 19:17 ?0次下載
    <b class='flag-5'>RA6M3</b> 組數(shù)據(jù)表

    【線下培訓(xùn)】上海臨港: RT-Thread × 瑞薩 工業(yè)監(jiān)視器 RA6M3 HMI Board解決方案

    RT-Thread 與瑞薩將于10月14日在上海臨港舉行一場(chǎng)線下培訓(xùn)。 本次培訓(xùn)將為開(kāi)發(fā)者們帶來(lái)期待已久的熱門(mén)技術(shù)主題, RT-Thread × 瑞薩 工業(yè)監(jiān)視器 RA6M3 HMI Board
    的頭像 發(fā)表于 09-07 17:40 ?667次閱讀
    【線下培訓(xùn)】上海臨港: RT-Thread × 瑞薩 工業(yè)監(jiān)視器 <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>解決方案

    瑞薩RA6M3 HMI-Board Video Demo 上手指南

    高性能芯片 RA6M3 及 RT-Thread 和 LVGL 軟件生態(tài),HMI Board 不僅硬件性能強(qiáng)勁,同時(shí)軟件生態(tài)豐富,助力開(kāi)發(fā)者快速開(kāi)發(fā)出 GUI 智能硬件產(chǎn)品。 本示例開(kāi)源鏈接: https
    的頭像 發(fā)表于 09-15 18:25 ?1422次閱讀
    瑞薩<b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI-Board</b> Video Demo 上手指南

    瑞薩 RA6M3 開(kāi)發(fā)實(shí)踐指南-UART實(shí)踐

    RT-Thread即將發(fā)布一系列RA6M3外設(shè)驅(qū)動(dòng)的實(shí)踐指南,我們將使用瑞薩RA6M3 HMI-Board 開(kāi)發(fā)板,帶領(lǐng)大家上手RT-Thread設(shè)備驅(qū)動(dòng)。? 【硬件介紹】 1.? 開(kāi)
    的頭像 發(fā)表于 09-23 12:15 ?1115次閱讀

    RA6M3 RT-Thread* LVGL HMI Board開(kāi)發(fā)實(shí)踐指南-GPIO實(shí)踐

    RT-Thread即將發(fā)布一系列RA6M3外設(shè)驅(qū)動(dòng)的實(shí)踐指南,我們將使用瑞薩RA6M3 HMI-Board 開(kāi)發(fā)板,帶領(lǐng)大家上手RT-Thread設(shè)備驅(qū)動(dòng), 本篇文章將介紹GPIO外設(shè)
    的頭像 發(fā)表于 11-30 19:05 ?939次閱讀
    <b class='flag-5'>RA6M3</b> RT-Thread* LVGL <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>開(kāi)發(fā)<b class='flag-5'>實(shí)踐</b>指南-GPIO<b class='flag-5'>實(shí)踐</b>