日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]前面我們學(xué)習(xí)了RTT的I2C總線設(shè)備的使用,文章鏈接: RT-Thread I2C總線設(shè)備學(xué)習(xí)筆記 這節(jié)學(xué)習(xí)RTT里非常簡單的設(shè)備--RTC設(shè)備 1、RTC設(shè)備簡介 RTC是什么呢?相信學(xué)習(xí)嵌入式的伙伴都熟悉,以下介紹引用自RT-Thread文檔中心-RTC設(shè)備 RTC(Real-Time Clock)實時時鐘

前面我們學(xué)習(xí)了RTT的I2C總線設(shè)備的使用,文章鏈接:

RT-Thread I2C總線設(shè)備學(xué)習(xí)筆記

這節(jié)學(xué)習(xí)RTT里非常簡單的設(shè)備--RTC設(shè)備

1、RTC設(shè)備簡介

RTC是什么呢?相信學(xué)習(xí)嵌入式的伙伴都熟悉,以下介紹引用自RT-Thread文檔中心-RTC設(shè)備

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

RT-Thread 的 RTC設(shè)備為操作系統(tǒng)的時間系統(tǒng)提供了基礎(chǔ)服務(wù)。面對越來越多的 IoT 場景,RTC 已經(jīng)成為產(chǎn)品的標配,甚至在諸如 SSL 的安全傳輸過程中,RTC 已經(jīng)成為不可或缺的部分。


2、RTC設(shè)備操作接口

RT-Thread為RTC設(shè)備提供了三個用戶層次的應(yīng)用操作接口,分別是設(shè)置日期設(shè)置時間獲取當前時間。在RT-Thread的設(shè)備中,有且僅有一個RTC設(shè)備,設(shè)備名稱為"rtc"。

2.1 設(shè)置日期(set_date)

rt_err_t set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day)
參數(shù) 描述
year 待設(shè)置生效的年份
month 待設(shè)置生效的月份
day 待設(shè)置生效的日
返回 ——
RT_EOK 設(shè)置成功
-RT_ERROR 失敗,沒有找到 rtc 設(shè)備
其他錯誤碼 失敗

如何使用呢?

/* 設(shè)置日期為2020年5月1號 */
set_date(2020,5,1);

2.2 設(shè)置時間(set_time)

rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second)
參數(shù) 描述
hour 待設(shè)置生效的時
minute 待設(shè)置生效的分
second 待設(shè)置生效的秒
返回 ——
RT_EOK 設(shè)置成功
-RT_ERROR 失敗,沒有找到 rtc 設(shè)備
其他錯誤碼 失敗

如何使用呢?

/* 設(shè)置時間為21點48分15秒 */
set_time(21, 48, 15);

2.3 獲取時間(time)

time_t time(time_t *t)
參數(shù) 描述
t 時間數(shù)據(jù)指針
返回 ——
當前時間值 time_t

如何使用呢?

/* 保存獲取的當前時間值 */
time_t now;
/* 獲取時間 */
now = time(RT_NULL);
/* 打印輸出時間信息 */
rt_kprintf("%s\n", ctime(&now));

3、RTC設(shè)備的使用

本次實驗基于小熊派開發(fā)板:

配置finsh命令、libc以及軟件模擬rtc選項。

打開RTC模塊使能

在終端處輸入date相關(guān)的命令,可讀取和設(shè)置RTC。

溫馨提示: 由于我們沒設(shè)置RTC硬件備份,所以這個時間設(shè)置僅僅是當前有效,當重新斷電重啟的時候,又會恢復(fù)為原來最開始的時間(如下圖所示)。

以下是date命令在RT-Thread中的實現(xiàn),源碼位于rtc.c

#if defined(RT_USING_FINSH) && defined(FINSH_USING_MSH)
static void date(uint8_t argc, char **argv)
{
if (argc == 1)
{
time_t now;
/* output current time */
now = time(RT_NULL);
rt_kprintf("%s", ctime(&now));
}
else if (argc >= 7)
{
/* set time and date */
uint16_t year;
uint8_t month, day, hour, min, sec;
year = atoi(argv[1]);
month = atoi(argv[2]);
day = atoi(argv[3]);
hour = atoi(argv[4]);
min = atoi(argv[5]);
sec = atoi(argv[6]);
if (year > 2099 || year < 2000)
{
rt_kprintf("year is out of range [2000-2099]\n");
return;
}
if (month == 0 || month > 12)
{
rt_kprintf("month is out of range [1-12]\n");
return;
}
if (day == 0 || day > 31)
{
rt_kprintf("day is out of range [1-31]\n");
return;
}
if (hour > 23)
{
rt_kprintf("hour is out of range [0-23]\n");
return;
}
if (min > 59)
{
rt_kprintf("minute is out of range [0-59]\n");
return;
}
if (sec > 59)
{
rt_kprintf("second is out of range [0-59]\n");
return;
}
set_time(hour, min, sec);
set_date(year, month, day);
}
else
{
rt_kprintf("please input: date [year month day hour min sec] or date\n");
rt_kprintf("e.g: date 2018 01 01 23 59 59 or date\n");
}
}
MSH_CMD_EXPORT(date, get date and time or set [year month day hour min sec]);
#endif /* defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) */

根據(jù)RTC設(shè)備API說明文檔,以及結(jié)合官方例程很容易可以實現(xiàn)以下demo:

/*
* Copyright (c) 2006-2019, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2019-09-09 RT-Thread first version
*/

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

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

/* PLEASE DEFINE the LED0 pin for your board, such as: PA5 */
#define LED0_PIN GET_PIN(C, 13)

/*
* 程序清單:這是一個 RTC 設(shè)備使用例程
* 例程導(dǎo)出了 rtc_sample 命令到控制終端
* 命令調(diào)用格式:rtc_sample
* 程序功能:設(shè)置RTC設(shè)備的日期和時間,延時一段時間后獲取當前時間并打印顯示。
*/

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

static int rtc_sample(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
time_t now;

/* 設(shè)置日期 */
ret = set_date(2020, 5, 2);
if (ret != RT_EOK)
{
rt_kprintf("set RTC date failed\n");
return ret;
}

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

/* 延時3秒 */
rt_thread_mdelay(3000);

/* 獲取時間 */
now = time(RT_NULL);
rt_kprintf("%s\n", ctime(&now));

return ret;
}
/* 導(dǎo)出到 msh 命令列表中 */
MSH_CMD_EXPORT(rtc_sample, rtc sample);

int main(void)
{
int count = 1;
/* set LED0 pin mode to output */
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
time_t now;
/* 獲取時間 */
now = time(RT_NULL);
rt_kprintf("%s\n", ctime(&now));
while (count++)
{
/* set LED0 pin level to high or low */
rt_pin_write(LED0_PIN, count % 2);
//LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
}

return RT_EOK;
}

導(dǎo)出rtc_sample命令后,就可以在終端上使用了。

如果我們要使用硬件RTC,那怎么辦呢?看board.h的RTC配置項相關(guān)說明:

/** if you want to use rtc(hardware) you can use the following instructions.
*
* STEP 1, open rtc driver framework(hardware) support in the RT-Thread Settings file
*
* STEP 2, define macro related to the rtc
* such as BSP_USING_ONCHIP_RTC
*
* STEP 3, modify your stm32xxxx_hal_config.h file to support rtc peripherals. define macro related to the peripherals
* such as #define HAL_RTC_MODULE_ENABLED
*
*/

根據(jù)說明提示:

  • 1 設(shè)置RT-Thread Settings

  • #define BSP_USING_ONCHIP_RTC

  • #define HAL_RTC_MODULE_ENABLED

配置完編譯工程下載后,看到串口的錯誤提示:

我一直以為是我哪里寫錯了還是哪里配置錯了,不知道問題出在哪里,最后跟蹤調(diào)試了下代碼以及查看以前的調(diào)試筆記終于找到了問題點:

調(diào)試筆記:

STM32 使用HAL庫調(diào)試內(nèi)部RTC經(jīng)驗總結(jié)

跳轉(zhuǎn)到定義,最后發(fā)現(xiàn)它是跳轉(zhuǎn)到這里了:

很明顯,這個地方有BUG,不應(yīng)該是一個值,果斷將這個部分注釋掉!(drv_rtc.c)

這樣的話跳轉(zhuǎn)過去的就是HAL庫的函數(shù)了嘛,這不就對了嘛:

發(fā)現(xiàn)論壇上也有大佬討論這個問題: https://www.rt-thread.org/qa/search.php?mod=forum&searchid=191&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=RTC

將代碼下載到板子以后,這次終于正常了:


溫馨提示:由于小熊派上沒有帶RTC備用電池,所以軟件復(fù)位后時間是可以正常跑的,但是斷電還是會恢復(fù)到原來的初始值噢!后來我拿了野火的STM32F103ZET6(帶RTC備用電池)驗證了一下是沒問題的,可以拿帶RTC備用電池的開發(fā)板嘗試一下!

大功告成!解決了問題,安心睡覺!祝各位朋友五一快樂!

公眾號粉絲福利時刻

這里我給大家申請到了福利,本公眾號讀者購買小熊派開發(fā)板可享受9折優(yōu)惠,有需要購買小熊派的朋友,淘寶搜索即可,跟客服說你是公眾號:嵌入式云IOT技術(shù)圈 的粉絲,立享9折優(yōu)惠!

往期精彩

RT-Thread I2C總線設(shè)備學(xué)習(xí)筆記

RT-Thread ADC設(shè)備學(xué)習(xí)筆記

RT-Thread PIN設(shè)備學(xué)習(xí)筆記

RT-Thread UART設(shè)備驅(qū)動框架初體驗(中斷方式接收帶\r\n的數(shù)據(jù))

若覺得本次分享的文章對您有幫助,隨手點[在看]并轉(zhuǎn)發(fā)分享,也是對我的支持。

免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉