chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

【EK-RA6E2開發(fā)指南】RTC實踐

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2025-09-23 18:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 RA6E2 RTC簡介

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

1758381330702u39oiuk5e0

2 RT-Thread 的RTC簡介

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

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

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

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

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

函數(shù)描述
rt_alarm_create()創(chuàng)建鬧鐘
rt_alarm_start()啟動鬧鐘
rt_alarm_stop()停止鬧鐘
rt_alarm_delete()刪除鬧鐘
rt_alarm_control()控制alarm設(shè)備
rt_alarm_dump()打印顯示設(shè)置的鬧鐘信息
關(guān)于RTC的更多資料請參看RT-Thread官方手冊:

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

3 RTC實例

3.1 RA6E2 RTC配置

接下來配置RTC,只需要簡單配置就可使用。

  • FSP配置RTC

1.添加 RTC 設(shè)備

1.png

2.配置 RTC

2.png

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

  • 配置RTC和alarm組件

然后打開對應(yīng)的通道

3.png

同時打開alarm組件。

4.png

3.2 RTC代碼實現(xiàn)

首先設(shè)置了年月日時分秒信息,然后獲取當(dāng)前時間,接著設(shè)置一個alarm,值得注意的是,alarm是基于RTC的,因此需要先將RTC初始化,然后才能開啟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)建初始化完成信號量*/
    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 failedn");
        return ret;
    }

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

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

    return ret;
}

/*作為用戶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 %sn", 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è)置為鬧鐘時間 */
    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);

3.3 測試驗證

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

5.png

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

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

    關(guān)注

    23

    文章

    3347

    瀏覽量

    120901
  • 時鐘芯片
    +關(guān)注

    關(guān)注

    2

    文章

    280

    瀏覽量

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

    關(guān)注

    2

    文章

    634

    瀏覽量

    70291
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    EK-RA6E2開發(fā)指南開發(fā)環(huán)境搭建

    瑞薩電子的開發(fā)工具有很多,筆者習(xí)慣使用MDK開發(fā),因此本文將基于MDK+RA Smart Configurator搭建開發(fā)環(huán)境。
    的頭像 發(fā)表于 09-23 18:12 ?2189次閱讀
    【<b class='flag-5'>EK-RA6E2</b><b class='flag-5'>開發(fā)指南</b>】<b class='flag-5'>開發(fā)</b>環(huán)境搭建

    EK-RA6E2開發(fā)指南】ADC獲取電壓值

    RA6E22個ADC單元,每個ADC單元有12位、10位、8位讀取數(shù)據(jù)的格式可以選擇,在單元0上有13個ADC通道,而在單元1上有16個ADC通道。 ADC單元具有三種掃描方式分別為:單次描模式、連續(xù)掃描模式和分組掃描模式,
    的頭像 發(fā)表于 09-23 18:15 ?1488次閱讀
    【<b class='flag-5'>EK-RA6E2</b><b class='flag-5'>開發(fā)指南</b>】ADC獲取電壓值

    EK-RA6E2開發(fā)指南】DAC設(shè)置電壓值

    RA6E2有片上DAC外設(shè),總共有兩路DAC輸出通道,每路的分辨率可配置為12位, 這兩個通道之間互不影響,每個通道都可以使用ELC功能可外部觸發(fā)或者進(jìn)行與ADC單元1的同步轉(zhuǎn)換。
    的頭像 發(fā)表于 09-23 18:16 ?1592次閱讀
    【<b class='flag-5'>EK-RA6E2</b><b class='flag-5'>開發(fā)指南</b>】DAC設(shè)置電壓值

    EK-RA2E2-快速入門指南

    EK-RA2E2-快速入門指南
    發(fā)表于 01-30 18:47 ?0次下載
    <b class='flag-5'>EK-RA2E2</b>-快速入門<b class='flag-5'>指南</b>

    EK-RA2E1 – 快速入門指南

    EK-RA2E1 – 快速入門指南
    發(fā)表于 02-03 19:08 ?0次下載
    <b class='flag-5'>EK-RA2E</b>1 – 快速入門<b class='flag-5'>指南</b>

    EK-RA6M2– 快速入門指南

    EK-RA6M2 – 快速入門指南
    發(fā)表于 03-13 19:36 ?0次下載
    <b class='flag-5'>EK-RA6M2</b>– 快速入門<b class='flag-5'>指南</b>

    EK-RA6E2v1 – 用戶手冊

    EK-RA6E2 v1 – 用戶手冊
    發(fā)表于 05-12 19:18 ?0次下載
    <b class='flag-5'>EK-RA6E2</b>v1 – 用戶手冊

    EK-RA6E2– 快速入門指南

    EK-RA6E2 – 快速入門指南
    發(fā)表于 05-12 19:20 ?1次下載
    <b class='flag-5'>EK-RA6E2</b>– 快速入門<b class='flag-5'>指南</b>

    EK-RA4E2– 快速入門指南

    EK-RA4E2 – 快速入門指南
    發(fā)表于 05-12 19:23 ?0次下載
    <b class='flag-5'>EK-RA4E2</b>– 快速入門<b class='flag-5'>指南</b>

    EK-RA6E2v1 – 用戶手冊

    EK-RA6E2 v1 – 用戶手冊
    發(fā)表于 06-29 19:10 ?1次下載
    <b class='flag-5'>EK-RA6E2</b>v1 – 用戶手冊

    EK-RA6E2– 快速入門指南

    EK-RA6E2 – 快速入門指南
    發(fā)表于 06-29 19:11 ?0次下載
    <b class='flag-5'>EK-RA6E2</b>– 快速入門<b class='flag-5'>指南</b>

    EK-RA4E2– 快速入門指南

    EK-RA4E2 – 快速入門指南
    發(fā)表于 06-29 19:14 ?0次下載
    <b class='flag-5'>EK-RA4E2</b>– 快速入門<b class='flag-5'>指南</b>

    EK-RA2E2-快速入門指南

    EK-RA2E2-快速入門指南
    發(fā)表于 07-03 20:12 ?0次下載
    <b class='flag-5'>EK-RA2E2</b>-快速入門<b class='flag-5'>指南</b>

    EK-RA2E1 – 快速入門指南

    EK-RA2E1 – 快速入門指南
    發(fā)表于 07-04 19:40 ?0次下載
    <b class='flag-5'>EK-RA2E</b>1 – 快速入門<b class='flag-5'>指南</b>

    EK-RA6M2– 快速入門指南

    EK-RA6M2 – 快速入門指南
    發(fā)表于 07-04 20:54 ?0次下載
    <b class='flag-5'>EK-RA6M2</b>– 快速入門<b class='flag-5'>指南</b>