單片機(jī)型號(hào):STM32F070F6P6
本文介紹,將RTC驅(qū)動(dòng)程序移植到自己的工程項(xiàng)目中的方法。本項(xiàng)目僅使用了RTC的實(shí)時(shí)時(shí)鐘功能,沒有啟動(dòng)定時(shí)報(bào)警等功能。
1、在STM32CubeMX中對RTC進(jìn)行配置,如下圖所示,激活了時(shí)鐘源和日歷功能。
2、配置RTC的時(shí)鐘,如下圖所示,STM32F070F6P6不能接外部的32.768K的晶振,所以只能使用HSE或LSI RC供給,考慮LSI RC精度比較差,所以使用HSE作為RTC的時(shí)鐘源,我現(xiàn)在接的HSE時(shí)鐘為12MHz,由于其頻率比較高,所以選擇最大的分頻系數(shù),這里是32,則供給給RTC的頻率為375KHz。
3、對RTC進(jìn)行設(shè)置,如下圖所示,這里只考慮Synchronous Predivider Value參數(shù)就可以了,其計(jì)算方法:RTC供給頻率/(Asynchronous Predivider Value+1) - 1=375000/128 - 1 =2930-1=2929。
4、設(shè)置完畢后,直接生成代碼就可以了。
5、在工程中加入stm32f0xx_hal_rtc.c和stm32f0xx_hal_rtc_ex.c文件。
6、在工程中新建rtc.cpp和rtc.h文件。
7、對stm32f0xx_hal_conf.h文件進(jìn)行設(shè)置,使能功能宏HAL_RTC_MODULE_ENABLED。
8、拷貝相應(yīng)的代碼對rtc.cpp文件中,并將以下內(nèi)容加入到rtc.h中。
#ifndef RTC_H_
#define RTC_H_
#ifdef __cplusplus
extern "C"{
class CRtc
{
public:
RTC_HandleTypeDef hrtc;
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
public:
CRtc(void);
void SetTime(void);
void GetTime(void);
};
}
#endif
#endif
9、rtc.cpp的文件內(nèi)容如下:
#include "include.h"
CRtc::CRtc(void)
{
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 2929;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Target.ErrorHandler(__FILE__, __LINE__);
}
sTime.Hours = 0x0;
sTime.Minutes = 0x0;
sTime.Seconds = 0x0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x1;
sDate.Year = 0x0;
SetTime();
}
void CRtc::SetTime(void)
{
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Target.ErrorHandler(__FILE__, __LINE__);
}
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
Target.ErrorHandler(__FILE__, __LINE__);
}
}
void CRtc::GetTime(void)
{
if (HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Target.ErrorHandler(__FILE__, __LINE__);
}
if (HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
Target.ErrorHandler(__FILE__, __LINE__);
}
}
10、在include.h中包含相應(yīng)的頭文件。
11、在hal.h中,聲明RTC對象。
12、在main.cpp中調(diào)用RTC相應(yīng)的成員函數(shù),就可以進(jìn)行時(shí)間的設(shè)置了。
上一篇:STM32開發(fā)筆記45:看門狗驅(qū)動(dòng)程序的移植
下一篇:STM32開發(fā)筆記43: 使用CMSIS-RTOS建立任務(wù)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 意法半導(dǎo)體推出先進(jìn)的 1600 V IGBT,面向高性價(jià)比節(jié)能家電市場
- EDPF-NT+分散控制系統(tǒng)網(wǎng)絡(luò)防護(hù)解決方案
- 基于PLC控制的易驅(qū)變頻器在布袋除塵器上的應(yīng)用
- 如何利用伺服自動(dòng)化實(shí)現(xiàn)成本降低和產(chǎn)能最大化?
- 壓力傳感器有哪些抗干擾措施?
- 破局!補(bǔ)盲dToF固態(tài)激光雷達(dá)輪番“出手”,禾賽FT120也要靠邊
- 利用正壓送風(fēng)壓力傳感器自動(dòng)控制火災(zāi)風(fēng)口壓力
- 多個(gè)傳感器間相互位置關(guān)系校準(zhǔn)方法
- 樓宇自控BA系統(tǒng)傳感器有哪些?
- 常見壓力傳感器工業(yè)原理匯總
- EEworld獨(dú)家原創(chuàng)視頻:大話TI CC2650,邀你來看!
- 觀看TI IOT解決方案研討會(huì) 答題即可贏取更多精美好禮!
- 【EEWORLD第三十九屆】2012年06月社區(qū)明星人物揭曉!
- 永不過時(shí)的物聯(lián)網(wǎng)解決方案 Intel帶你6的飛起來!
- ADI有獎(jiǎng)下載活動(dòng)之25:ADI汽車傳感器和傳感器接口解決方案
- Vicor 更好的供電方式提升無人機(jī)飛行時(shí)間飛行半徑及有效載荷
- 考眼力:高速數(shù)字設(shè)計(jì)的秘籍 藏在哪里? 走近Keysight PATHWAVE,提升工作效率
- TI 最新電容式觸控套件,免費(fèi)嘗鮮中
- TI有獎(jiǎng)直播|借助Sitara™ AM263x MCU 創(chuàng)造電氣化的未來
- 小米Mix Fold折疊屏的新機(jī)渲染圖
- 三星Note 10+或支持45W快充 但是充電器需要購買
- 榮耀宣布8月推出電視產(chǎn)品:智慧屏
- 小米路由器遭到惡意抹黑,官方怒曬黑稿回應(yīng)
- 官方公布榮耀9X背面圖顯示:后置三攝+電感X紋理漸變
- 電視行業(yè)遇冷,這是激光電視的機(jī)遇?
- 三元材料專利技術(shù)布局隱憂凸顯 鋰電池行業(yè)或面臨生死劫
- 毫米級“極簡機(jī)器人”未來可操作無創(chuàng)手術(shù) 送遞藥物
- 日本研究人員開發(fā)電子皮膚:可顯示健康數(shù)據(jù)
- 機(jī)器人技術(shù)引領(lǐng)人們進(jìn)入全新的時(shí)代