GD32F407單片機開發入門(十七)內部RTC實時時鐘及實戰含源碼

文章目錄

    • 一.概要
    • 二.RTC基本特點
    • 三.GD32單片機RTC內部結構圖
    • 四.配置一個RTC走秒例程
    • 五.工程源代碼下載
    • 六.小結

一.概要

RTC(Real-Time Clock)是一種用于追蹤和記錄實際時間的時鐘系統。RTC模塊提供了一個包含日期(年/月/日)和時間(時/分/秒/亞秒)的日歷功能。除亞秒用二進制碼顯示外,時間和日期都以BCD碼的形式顯示。RTC可以進行夏令時補償。RTC可以工作在省電模式下,并通過軟件配置來智能喚醒。RTC支持外接更高精度的低頻時鐘,用以達到更高的日歷精度。

本文介紹了GD32 RTC實時時鐘的基本概念,內部結構,以及用內部RTC進行時間計時的例程。

二.RTC基本特點

1.通過軟件設置來實現夏令時補償
2.參考時鐘檢測功能:通過外接更高精度的低頻率時鐘源(50Hz或60Hz)來提高日歷精度
3.數字校準功能:通過調整最小時間單位(最大可調精度0.95ppm)來進行日歷校準
4.通過移位功能進行亞秒級調整
5.記錄事件時間的時間戳功能
6.兩個模式可配置的獨立的侵入檢測
7.可編程的日歷和兩個位域可屏蔽的鬧鐘
8.可屏蔽的中斷源: 鬧鐘0和鬧鐘1,時間戳檢測,侵入檢測,自動喚醒事件
9.20個32位(共80字節)通用備份寄存器,能夠在省電模式下保存數據。當有外部事件侵入時,備份寄存器將會復位

三.GD32單片機RTC內部結構圖

RTC內部結構圖如下

在這里插入圖片描述
RTC單元有三個可選的獨立時鐘源:LXTAL、IRC32K和HXTAL的2-31(由RCU_CFG寄存器配置)分頻后的時鐘。
ck_spre用于為日歷寄存器提供時鐘,每個時鐘增加一秒。
異步預分頻器(Asynchronous Prescaler):將輸入時鐘分頻為中間頻率(如從32.768 kHz分頻至1 kHz)。異步分頻器主要用來降低功率消耗。
同步預分頻器(Synchronous Prescaler):進一步分頻中間頻率至1 Hz信號,驅動計數器。
可編程鬧鐘:通過比較器匹配計數器值,觸發中斷或喚醒事件。

四.配置一個RTC走秒例程

STLINK接GD32F407VET6開發板,STLINK接電腦USB口。

在這里插入圖片描述

主要代碼

#define RTC_CLOCK_SOURCE_LXTAL //配置時鐘源為外部32.768K晶振/*!\brief    get current time and date\param[in]  none\param[out] rtc_initpara_struct: pointer to a rtc_parameter_struct structure which contains parameters for initialization of the rtc peripheralmembers of the structure and the member values are shown as below:year: 0x0 - 0x99(BCD format)month: RTC_JAN, RTC_FEB, RTC_MAR, RTC_APR, RTC_MAY, RTC_JUN,RTC_JUL, RTC_AUG, RTC_SEP, RTC_OCT, RTC_NOV, RTC_DECdate: 0x1 - 0x31(BCD format)day_of_week: RTC_MONDAY, RTC_TUESDAY, RTC_WEDSDAY, RTC_THURSDAYRTC_FRIDAY, RTC_SATURDAY, RTC_SUNDAYhour: 0x0 - 0x12(BCD format) or 0x0 - 0x23(BCD format) depending on the rtc_display_format choseminute: 0x0 - 0x59(BCD format)second: 0x0 - 0x59(BCD format)factor_asyn: 0x0 - 0x7Ffactor_syn: 0x0 - 0x7FFFam_pm: RTC_AM, RTC_PMdisplay_format: RTC_24HOUR, RTC_12HOUR\retval     none
*/
void rtc_current_time_get(rtc_parameter_struct* rtc_initpara_struct)
{uint32_t temp_tr = 0U, temp_dr = 0U, temp_pscr = 0U, temp_ctlr = 0U;temp_tr = (uint32_t)RTC_TIME;   temp_dr = (uint32_t)RTC_DATE;temp_pscr = (uint32_t)RTC_PSC;temp_ctlr = (uint32_t)RTC_CTL;/* get current time and construct rtc_parameter_struct structure */rtc_initpara_struct->year = (uint8_t)GET_DATE_YR(temp_dr);rtc_initpara_struct->month = (uint8_t)GET_DATE_MON(temp_dr);rtc_initpara_struct->date = (uint8_t)GET_DATE_DAY(temp_dr);rtc_initpara_struct->day_of_week = (uint8_t)GET_DATE_DOW(temp_dr);  rtc_initpara_struct->hour = (uint8_t)GET_TIME_HR(temp_tr);rtc_initpara_struct->minute = (uint8_t)GET_TIME_MN(temp_tr);rtc_initpara_struct->second = (uint8_t)GET_TIME_SC(temp_tr);rtc_initpara_struct->factor_asyn = (uint16_t)GET_PSC_FACTOR_A(temp_pscr);rtc_initpara_struct->factor_syn = (uint16_t)GET_PSC_FACTOR_S(temp_pscr);rtc_initpara_struct->am_pm = (uint32_t)(temp_pscr & RTC_TIME_PM); rtc_initpara_struct->display_format = (uint32_t)(temp_ctlr & RTC_CTL_CS);
}
void rtc_show_time(void)
{rtc_current_time_get(&rtc_initpara);  
}
//初始化時間設置
void rtc_setup(void)
{/* setup RTC time value */uint32_t tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF;rtc_initpara.factor_asyn = prescaler_a;rtc_initpara.factor_syn = prescaler_s;rtc_initpara.year = 0x16;//設置初始化時間:年rtc_initpara.day_of_week = RTC_SATURDAY;rtc_initpara.month = RTC_APR;//設置初始化時間:月rtc_initpara.date = 0x30;//設置初始化時間:日rtc_initpara.display_format = RTC_24HOUR;rtc_initpara.am_pm = RTC_AM;rtc_initpara.hour = 00; //設置初始化時間:時  rtc_initpara.minute = 00;//設置初始化時間:分rtc_initpara.second = 00;//設置初始化時間:秒/* RTC current time configuration */if(ERROR == rtc_init(&rtc_initpara)){    }else{rtc_show_time();RTC_BKP0 = BKP_VALUE;}
}
uint8_t aShowTime[16] = "hh:ms:ss";//定義時分秒
uint8_t aShowDate[16] = "dd-mm-yyyy";//定義年月日
int main(void)
{systick_config();//配置系統主頻168M,外部8M晶振,配置在#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)/* enable PMU clock */rcu_periph_clock_enable(RCU_PMU);/* enable the access of the RTC registers */pmu_backup_write_enable();rtc_pre_config();//配置RTCrtc_setup(); //設置時間2016年4月30日,0點0分0秒while(1){delay_1ms(500);//500ms等待rtc_show_time();//讀取時間sprintf((char *)aShowTime, "%2x:%2x:%2x", rtc_initpara.hour, rtc_initpara.minute, rtc_initpara.second);sprintf((char *)aShowDate, "%2x-%2x-%2x", rtc_initpara.month, rtc_initpara.date, 0x2000 + rtc_initpara.year);}
}

實驗效果

時分秒變量會走秒,如下圖所示,把aShowTime數組放入Memory查看窗口。
在這里插入圖片描述

五.工程源代碼下載

源碼下載鏈接如下:
CSDN

六.小結

RTC 可以為嵌入式系統提供精確的時間基準,用于各種定時任務和事件。RTC 可以用于智能家居設備中的時間控制,如智能門鎖、智能照明等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81406.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新能源汽車運動控制器核心芯片選型與優化:MCU、DCDC與CANFD協同設計

摘要:隨著新能源汽車產業的迅猛發展,汽車運動控制器的性能和可靠性面臨著更高的要求。本文深入探討了新能源汽車運動控制器中MCU(微控制單元)、DCDC電源管理芯片和CANFD總線通信芯片的選型要點、優化策略及其協同設計方案。通過綜…

2.maven 手動安裝 jar包

1.背景 有的時候,maven倉庫無法下載,可以手動安裝。本文以pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar為例。 2.預先準備 下載文件到本地指定位置。 2.1.安裝pom mvn install:install-file \-Dfile/home/wind/tmp/pentaho-aggdesigner-5.1.5-jh…

OpenCV 圖形API(75)圖像與通道拼接函數-----將 4 個單通道圖像矩陣 (GMat) 合并為一個 4 通道的多通道圖像矩陣函數merge4()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 由4個單通道矩陣創建一個4通道矩陣。 該函數將多個矩陣合并為一個單一的多通道矩陣。也就是說,輸出矩陣的每一個元素都是輸入矩陣對…

AI日報 · 2025年05月02日 | 再見GPT-4!OpenAI CEO 確認 GPT-4 已從 ChatGPT 界面正式移除

1、OpenAI CEO 確認 GPT-4 已從 ChatGPT 界面正式移除 在處理 GPT-4o 更新問題的同時,OpenAI CEO Sam Altman 于 5 月 1 日在 X 平臺發文,正式確認初代 GPT-4 模型已從 ChatGPT 主用戶界面中移除。此舉遵循了 OpenAI 此前公布的計劃,即在 4 …

patch命令在代碼管理中的應用

patch 是一個用于將差異文件(補丁)應用到源代碼的工具,常用于修復 bug、添加功能或調整代碼結構。在您提供的代碼中,patch 命令通過一系列補丁文件(.patch)修改了 open-amp 庫的源代碼。 patch 命令的核心作…

spring-ai集成langfuse

1、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

PyTorch 與 TensorFlow:深度學習框架的深度剖析與實戰對比

PyTorch 與 TensorFlow&#xff1a;深度學習框架的深度剖析與實戰對比 摘要 &#xff1a;本文深入對比 PyTorch 與 TensorFlow 兩大深度學習框架&#xff0c;從核心架構、優缺點、適用場景等多維度剖析&#xff0c;結合實例講解&#xff0c;幫助開發者清晰理解兩者特性&#x…

如何配置NGINX作為反向代理服務器來緩存后端服務的響應?

大家好&#xff0c;我是鋒哥。今天分享關于【如何配置NGINX作為反向代理服務器來緩存后端服務的響應&#xff1f;】面試題。希望對大家有幫助&#xff1b; 如何配置NGINX作為反向代理服務器來緩存后端服務的響應&#xff1f; 1000道 互聯網大廠Java工程師 精選面試題-Java資源…

DiT:文檔圖像Transformer 的自監督預訓練

摘要 圖像transformer&#xff08;Image Transformer&#xff09;最近在自然圖像理解方面取得了顯著進展&#xff0c; 無論是使用監督&#xff08;ViT、DeiT等&#xff09;還是自監督&#xff08;BEiT、MAE等&#xff09;預訓練技術。在本文中&#xff0c;我們提出了DiT&#…

51c嵌入式~電路~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/11888986 一、電流檢測電路 電流檢測的應用 電路檢測電路常用于&#xff1a;高壓短路保護、電機控制、DC/DC換流器、系統功耗管理、二次電池的電流管理、蓄電池管理等電流檢測等場景。電路專輯 對于大部分應用&#xff…

【Git】萬字詳解 Git 的原理與使用(上)

&#x1f970;&#x1f970;&#x1f970;來都來了&#xff0c;不妨點個關注叭&#xff01; &#x1f449;博客主頁&#xff1a;歡迎各位大佬!&#x1f448; 文章目錄 1. 初識 Git1.1 Git 是什么&#xff1f;1.2 為什么要有 Git 2. 安裝 Git2.1 Linux-Ubuntu 安裝 Git2.2 Windo…

【原創開發】無印去水印[特殊字符]短視頻去水印工具[特殊字符]支持一鍵批量解析

支持&#xff1a;快手&#xff0c;抖音&#xff0c;小紅書&#xff0c;嗶哩嗶哩&#xff0c;等多款應用去水印&#xff0c;支持圖集解析下載 【應用名稱】&#xff1a;無印 【應用版本】&#xff1a;1.3 【應用大小】&#xff1a;17M 【測試機型】&#xff1a;小米14 【下載鏈…

qemu(3) -- qemu-arm使用

1. 前言 qemu中有很多的特技&#xff0c;此處記錄下qemu-arm的使用方式&#xff0c;簡單來說qemu-system-xx用于虛擬整個設備&#xff0c;包括操作系統的運行環境&#xff0c;而qemu-xx僅虛擬Linux應用程序的環境&#xff0c;不涉及操作系統&#xff0c;應用程序的系統調用有宿…

Docker的簡單使用(不全)

Docker Hello World Docker 允許在容器內運行應用程序&#xff0c;使用docker run命令來在容器內運行一個應用程序 輸出Hello World runoobrunoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"Hello world docker&#xff1a;Docker的二進制執行文件 run…

SALOME源碼分析: 命令系統

本文分析SALOME中命令系統&#xff0c;涉及的知識點包括&#xff0c; MDF框架數據對象模型 注1&#xff1a;限于研究水平&#xff0c;分析難免不當&#xff0c;歡迎批評指正。注2&#xff1a;文章內容會不定期更新。 一、命令對象 1.1 Class Hierarchy 1.2 SUIT_Operation #…

Bootstrap(自助法)??:無需假設分布的統計推斷工具

核心思想?? Bootstrap 是一種??重采樣&#xff08;Resampling&#xff09;技術??&#xff0c;通過在原始數據中??有放回地重復抽樣??&#xff0c;生成大量新樣本集&#xff0c;用于估計統計量&#xff08;如均值、方差&#xff09;的分布或模型性能的不確定性。 ??…

沙箱逃逸(Python沙盒逃逸深度解析)

沙箱逃逸&#xff08;Python沙盒逃逸深度解析&#xff09; 一、沙盒逃逸的核心目標 執行系統命令 通過調用os.system、subprocess.Popen等函數執行Shell命令&#xff0c;例如讀取文件或反彈Shell。 文件操作 讀取敏感文件&#xff08;如/etc/passwd&#xff09;、寫入后門文件…

融智學數學符號體系的系統解讀(之一)

融智學數學符號體系的系統解讀 一、道函數&#xff08;Dao Function&#xff09; 數學表達式&#xff1a; f(x,y,z)0&#xff08;狹義&#xff09; f(x,y,z,ict)0&#xff08;廣義&#xff09; 符號解析&#xff1a; x: 形象思維坐標軸 數學意義: 表征基于感官輸入的多模…

Java 中使用正則表達式

1. 引入包 在使用正則表達式之前,需要引入包: import java.util.regex.Matcher; import java.util.regex.Pattern; 2. 常用模式規則 元字符 :這些是正則表達式中的特殊字符,用于匹配特定的模式。 . :匹配任意單個字符(換行符除外)。例如,a.b 可以匹配 "acb&quo…

cat file.tar.gz | tar -xzf - -C /target/dir兩個減號之間為什么有個空格?是寫錯了嗎?(管道命令后續)

在 tar 命令的參數 -xzf - -C 中&#xff0c;兩個減號&#xff08;-&#xff09;之間的空格是故意保留的語法&#xff0c;沒有寫錯。具體原因如下&#xff1a; 1. -xzf - 的語法解析 -xzf 是 tar 命令的組合參數&#xff1a; x&#xff1a;表示解壓&#xff08;extract&#x…