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

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

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

RTC+硬件時鐘分析STM32L4

冬至子 ? 來源:魂斷冥殤 ? 作者:魂斷冥殤 ? 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; /
時 - 取值區(qū)間為[0,23] /
int tm_mday; /
一個月中的日期 - 取值區(qū)間為[1,31] /
int tm_mon; /
月份(從一月開始,0代表一月) - 取值區(qū)間為[0,11] /
int tm_year; /
年份,其值等于實際年份減去1900 /
int tm_wday; /
星期 – 取值區(qū)間為[0,6],其中0代表星期天,1代表星期一,以此類推 /
int tm_yday; /
從每年的1月1日開始的天數(shù) – 取值區(qū)間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 /
int tm_isdst; /
夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不了解情況 時,tm_isdst()為負。*/
};
月份為0-11
年份又是從1900年開始
星期又是0~6
time_t
time_t卻是從1970/1/1 000開始的秒數(shù)

二、再從重點轉(zhuǎn)換函數(shù)看起

timegm()和gmtime_r()

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

三、再談time格式化字符:

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

四、再從底層驅(qū)動看起,

1.實際的硬件時間:

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

相當于本地時間:2023/11/23 19:03:00 實際存儲到硬件為23/11/23 19:03:00

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

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

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

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

在set_rtc_time_stamp中l(wèi)ocaltime()將相對1970/0/0 000的秒數(shù)(不帶時區(qū))轉(zhuǎn)換為struct tm結(jié)構(gòu)體數(shù)據(jù)(帶時區(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é):

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

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

    關(guān)注

    4

    文章

    590

    瀏覽量

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

    關(guān)注

    2

    文章

    523

    瀏覽量

    66228
  • STM32L4
    +關(guān)注

    關(guān)注

    1

    文章

    42

    瀏覽量

    9374
收藏 人收藏

    評論

    相關(guān)推薦

    STM32L4時鐘樹概述

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

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

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

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

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

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

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

    STM32L4系列一、時鐘系統(tǒng)簡介

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

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

    AN4726_適用于STM32L4STM32L4plus系列的STM32Cube固件例程
    發(fā)表于 11-21 17:06 ?8次下載
    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硬件過采樣應(yīng)用

    AN4629_STM32L0和STM32L4系列MCU的ADC硬件過采樣應(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>過采樣應(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 ?0次下載
    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中使用硬件實時時鐘RTC

    STM32 F0、F2、F3、F4L1系列MCU中使用硬件實時時鐘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>實時<b class='flag-5'>時鐘</b>(<b class='flag-5'>RTC</b>)

    UM1860_基于STM32L4STM32L4+ 系列的STM32CubeL4軟件庫使用入門

    UM1860_基于STM32L4STM32L4+ 系列的STM32CubeL4軟件庫使用入門
    發(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>軟件庫使用入門

    PM0214_STM32F3,STM32F4,STM32L4STM32L4plus單片機編程手冊

    PM0214_STM32F3,STM32F4,STM32L4STM32L4plus單片機編程手冊
    發(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單片機編程手冊

    STM32L4定時器(TIMER)介紹

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

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

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