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

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

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

RTC+硬件時(shí)鐘分析STM32L4

冬至子 ? 來(lái)源:魂斷冥殤 ? 作者:魂斷冥殤 ? 2023-11-28 17:10 ? 次閱讀

一、先從結(jié)構(gòu)體看起

struct tm
{
int tm_sec; /* 秒 – 取值區(qū)間為[0,59] /
int tm_min; /
分 - 取值區(qū)間為[0,59] /
int tm_hour; /
時(shí) - 取值區(qū)間為[0,23] /
int tm_mday; /
一個(gè)月中的日期 - 取值區(qū)間為[1,31] /
int tm_mon; /
月份(從一月開(kāi)始,0代表一月) - 取值區(qū)間為[0,11] /
int tm_year; /
年份,其值等于實(shí)際年份減去1900 /
int tm_wday; /
星期 – 取值區(qū)間為[0,6],其中0代表星期天,1代表星期一,以此類推 /
int tm_yday; /
從每年的1月1日開(kāi)始的天數(shù) – 取值區(qū)間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 /
int tm_isdst; /
夏令時(shí)標(biāo)識(shí)符,實(shí)行夏令時(shí)的時(shí)候,tm_isdst為正。不實(shí)行夏令時(shí)的進(jìn)候,tm_isdst為0;不了解情況 時(shí),tm_isdst()為負(fù)。*/
};
月份為0-11
年份又是從1900年開(kāi)始
星期又是0~6
time_t
time_t卻是從1970/1/1 000開(kāi)始的秒數(shù)

二、再?gòu)闹攸c(diǎn)轉(zhuǎn)換函數(shù)看起

timegm()和gmtime_r()

timegm()是將struct tm結(jié)構(gòu)體轉(zhuǎn)換為time_t,直接時(shí)間計(jì)算
gmtime_r()是將time_t轉(zhuǎn)換為struct tm結(jié)構(gòu)體數(shù)據(jù)
mktime()和localtime_r()
mktime先調(diào)用timegm()轉(zhuǎn)換為time_t,再減去時(shí)區(qū)
localtime_r()先加上時(shí)區(qū)值,再調(diào)用gmtime_r()轉(zhuǎn)換為結(jié)構(gòu)體

三、再談time格式化字符:

ctime(),ctime_r(),asctime()最終都是調(diào)用asctime_r()

四、再?gòu)牡讓域?qū)動(dòng)看起,

1.實(shí)際的硬件時(shí)間:

-# 實(shí)際年份-1900年-100的年份 = 實(shí)際年份-2000年,
-# 其他時(shí)間為本地時(shí)分秒

相當(dāng)于本地時(shí)間:2023/11/23 19:03:00 實(shí)際存儲(chǔ)到硬件為23/11/23 19:03:00

在網(wǎng)上搜到一篇文章,就說(shuō)的windows和linux系統(tǒng)硬件存儲(chǔ)的實(shí)際時(shí)間也是本地時(shí)間

五、硬件時(shí)間轉(zhuǎn)換與timestamp相互轉(zhuǎn)換

在get_rtc_timestamp中mktime()將底層硬件時(shí)間(帶時(shí)區(qū))轉(zhuǎn)換為相對(duì)1970/1/1 000的秒數(shù)(不帶時(shí)區(qū)),

重點(diǎn):mktime()將struct tm * t結(jié)構(gòu)時(shí)間減去時(shí)區(qū)值

在set_rtc_time_stamp中l(wèi)ocaltime()將相對(duì)1970/0/0 000的秒數(shù)(不帶時(shí)區(qū))轉(zhuǎn)換為struct tm結(jié)構(gòu)體數(shù)據(jù)(帶時(shí)區(qū))

六、time()和stime函數(shù)

time()調(diào)用_control_rtc()→最終調(diào)用get_rtc_timestamp()
stime函數(shù)調(diào)用_control_rtc()→最終調(diào)用set_rtc_timestamp()

總結(jié):

底層硬件時(shí)間與tm結(jié)構(gòu)體時(shí)間都是有區(qū)別,各處應(yīng)使用tm結(jié)構(gòu)體時(shí)間(應(yīng)為1900年到現(xiàn)在的時(shí)間)

聲明:本文內(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)投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    593

    瀏覽量

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

    關(guān)注

    2

    文章

    538

    瀏覽量

    66528
  • STM32L4
    +關(guān)注

    關(guān)注

    1

    文章

    42

    瀏覽量

    9413
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32L4時(shí)鐘樹(shù)概述

    1. STM32L4 時(shí)鐘樹(shù)概述時(shí)鐘系統(tǒng)是 CPU 的脈搏,就像人的心跳一樣。STM32 本身非常復(fù)雜,外設(shè)非常的多,但是并不是所有外設(shè)都需要系統(tǒng)時(shí)
    發(fā)表于 08-10 06:40

    STM32L4系列一、時(shí)鐘系統(tǒng)簡(jiǎn)介 精選資料分享

    跟著原子哥學(xué)習(xí),順便寫(xiě)點(diǎn)筆記~主要內(nèi)容1)STM32L4 時(shí)鐘樹(shù)概述;2)STM32L4 時(shí)鐘初始化配置;3)STM32L4
    發(fā)表于 08-12 06:10

    STM32L4 RTC內(nèi)部喚醒周期性中斷設(shè)置方法有哪些

    STM32的實(shí)時(shí)時(shí)鐘RTC模塊有何功能?如何對(duì)STM32L4 RTC時(shí)鐘源進(jìn)行配置?
    發(fā)表于 02-28 09:13

    STM32L4循環(huán)冗余校驗(yàn)?zāi)K(CRC)介紹

    STM32L4循環(huán)冗余校驗(yàn)?zāi)K(CRC)介紹 有興趣的可以參考下
    發(fā)表于 12-25 10:38 ?27次下載

    STM32L4系列一、時(shí)鐘系統(tǒng)簡(jiǎn)介

    跟著原子哥學(xué)習(xí),順便寫(xiě)點(diǎn)筆記~主要內(nèi)容1)STM32L4 時(shí)鐘樹(shù)概述;2)STM32L4 時(shí)鐘初始化配置;3)STM32L4
    發(fā)表于 11-21 18:36 ?21次下載
    <b class='flag-5'>STM32L4</b>系列一、<b class='flag-5'>時(shí)鐘</b>系統(tǒng)簡(jiǎn)介

    AN4726_適用于STM32L4STM32L4plus系列的STM32Cube固件例程

    AN4726_適用于STM32L4STM32L4plus系列的STM32Cube固件例程
    發(fā)表于 11-21 17:06 ?9次下載
    AN4726_適用于<b class='flag-5'>STM32L4</b>和<b class='flag-5'>STM32L4</b>plus系列的<b class='flag-5'>STM32</b>Cube固件例程

    AN4729_STM32L0和STM32L4防火墻概述

    AN4729_STM32L0和STM32L4防火墻概述
    發(fā)表于 11-21 17:06 ?0次下載
    AN4729_<b class='flag-5'>STM32L</b>0和<b class='flag-5'>STM32L4</b>防火墻概述

    AN4629_STM32L0和STM32L4系列MCU的ADC硬件過(guò)采樣應(yīng)用

    AN4629_STM32L0和STM32L4系列MCU的ADC硬件過(guò)采樣應(yīng)用
    發(fā)表于 11-21 17:06 ?12次下載
    AN4629_<b class='flag-5'>STM32L</b>0和<b class='flag-5'>STM32L4</b>系列MCU的ADC<b class='flag-5'>硬件</b>過(guò)采樣應(yīng)用

    AN4612_STM32L1與STM32L4STM32L4plus微控制器之間的移植

    AN4612_STM32L1與STM32L4STM32L4plus微控制器之間的移植
    發(fā)表于 11-21 17:06 ?2次下載
    AN4612_<b class='flag-5'>STM32L</b>1與<b class='flag-5'>STM32L4</b>和<b class='flag-5'>STM32L4</b>plus微控制器之間的移植

    AN4649_從STM32F1到STM32L4/STM32L4plus的軟件移植

    AN4649_從STM32F1到STM32L4/STM32L4plus的軟件移植
    發(fā)表于 11-21 17:06 ?1次下載
    AN4649_從<b class='flag-5'>STM32</b>F1到<b class='flag-5'>STM32L4</b>/<b class='flag-5'>STM32L4</b>plus的軟件移植

    STM32 F0、F2、F3、F4L1系列MCU中使用硬件實(shí)時(shí)時(shí)鐘RTC

    STM32 F0、F2、F3、F4L1系列MCU中使用硬件實(shí)時(shí)時(shí)鐘RTC
    發(fā)表于 11-21 17:07 ?2次下載
    在<b class='flag-5'>STM32</b> F0、F2、F3、F<b class='flag-5'>4</b>和<b class='flag-5'>L</b>1系列MCU中使用<b class='flag-5'>硬件</b>實(shí)時(shí)<b class='flag-5'>時(shí)鐘</b>(<b class='flag-5'>RTC</b>)

    UM1860_基于STM32L4STM32L4+ 系列的STM32CubeL4軟件庫(kù)使用入門(mén)

    UM1860_基于STM32L4STM32L4+ 系列的STM32CubeL4軟件庫(kù)使用入門(mén)
    發(fā)表于 11-22 19:13 ?5次下載
    UM1860_基于<b class='flag-5'>STM32L4</b> 和 <b class='flag-5'>STM32L4</b>+ 系列的<b class='flag-5'>STM32CubeL4</b>軟件庫(kù)使用入門(mén)

    PM0214_STM32F3,STM32F4,STM32L4STM32L4plus單片機(jī)編程手冊(cè)

    PM0214_STM32F3,STM32F4,STM32L4STM32L4plus單片機(jī)編程手冊(cè)
    發(fā)表于 11-24 08:30 ?22次下載
    PM0214_<b class='flag-5'>STM32</b>F3,<b class='flag-5'>STM32F4</b>,<b class='flag-5'>STM32L4</b>和<b class='flag-5'>STM32L4</b>plus單片機(jī)編程手冊(cè)

    STM32L4定時(shí)器(TIMER)介紹

    電子發(fā)燒友網(wǎng)站提供《STM32L4定時(shí)器(TIMER)介紹.pdf》資料免費(fèi)下載
    發(fā)表于 08-01 14:24 ?0次下載
    <b class='flag-5'>STM32L4</b>定時(shí)器(TIMER)介紹

    STM32L4外部中斷及事件控制模塊(EXTI)

    電子發(fā)燒友網(wǎng)站提供《STM32L4外部中斷及事件控制模塊(EXTI).pdf》資料免費(fèi)下載
    發(fā)表于 08-01 10:23 ?0次下載
    <b class='flag-5'>STM32L4</b>外部中斷及事件控制模塊(EXTI)