STM32開發筆記44:RTC驅動程式的移植
微控制器型號:STM32F070F6P6
本文介紹,將RTC驅動程式移植到自己的工程專案中的方法。本專案僅使用了RTC的實時時鐘功能,沒有啟動定時報警等功能。
1、在STM32CubeMX中對RTC進行配置,如下圖所示,激活了時鐘源和日曆功能。
2、配置RTC的時鐘,如下圖所示,STM32F070F6P6不能接外部的32.768K的晶振,所以只能使用HSE或LSI RC供給,考慮LSI RC精度比較差,所以使用HSE作為RTC的時鐘源,我現在接的HSE時鐘為12MHz,由於其頻率比較高,所以選擇最大的分頻係數,這裡是32,則供給給RTC的頻率為375KHz。
3、對RTC進行設定,如下圖所示,這裡只考慮Synchronous Predivider Value引數就可以了,其計算方法:RTC供給頻率/(Asynchronous Predivider Value+1) - 1=375000/128 - 1 =2930-1=2929。
4、設定完畢後,直接生成程式碼就可以了。
5、在工程中加入stm32f0xx_hal_rtc.c和stm32f0xx_hal_rtc_ex.c檔案。
6、在工程中新建rtc.cpp和rtc.h檔案。
7、對stm32f0xx_hal_conf.h檔案進行設定,使能功能巨集HAL_RTC_MODULE_ENABLED。
8、拷貝相應的程式碼對rtc.cpp檔案中,並將以下內容加入到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的檔案內容如下:
#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中包含相應的標頭檔案。
11、在hal.h中,宣告RTC物件。
12、在main.cpp中呼叫RTC相應的成員函式,就可以進行時間的設定了。
原創性文章,轉載請註明出處CSDN:http://blog.csdn.net/qingwufeiyang12346。