說(shuō)明:由于開(kāi)發(fā)板上沒(méi)有32.768kHz的時(shí)鐘,所以選擇內(nèi)部32kHz的時(shí)鐘。
基本配置
1.首先使能RTC
2.配置時(shí)鐘(內(nèi)部時(shí)鐘32kHz)
3. General選項(xiàng)組里配置小時(shí)模式,有24小時(shí)制和12小時(shí)制可選,后面的127和255組合成分頻系數(shù),127實(shí)際對(duì)應(yīng)128,255實(shí)際對(duì)應(yīng)256,所以128×256=32768,正好實(shí)現(xiàn)輸入32.768KHz時(shí)鐘分頻到1Hz。
由于我們選擇內(nèi)部時(shí)鐘,所以設(shè)置為79和399,80x400=32000,實(shí)現(xiàn)輸入32KHz時(shí)鐘分頻到1Hz。
4. 初始時(shí)間及日期配置:
DataFormat選項(xiàng)分別為BIN(時(shí)間為10進(jìn)制)BCD(時(shí)間為16進(jìn)制)
Hours為初始時(shí)間的小時(shí)
Minutes為初始時(shí)間的分鐘
Seconds為初始時(shí)間的秒數(shù)
設(shè)置鬧鐘
1.鬧鐘使用,鬧鐘A設(shè)置為xx:xx:30觸發(fā),即每分鐘的30秒觸發(fā)。
2.使能鬧鐘中斷
3.調(diào)用鬧鐘回調(diào)函數(shù),每分鐘30秒的時(shí)候觸發(fā)一次
?void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
?????? HAL_UART_Transmit(&huart6,(uint8_t *)"Alarm\r\n",7, 100);
}
周期喚醒
1.配置,Wake Up Clock:周期喚醒的時(shí)鐘源;Wake Up Counter:喚醒計(jì)數(shù)器的重載值,如果設(shè)置為0,則每個(gè)時(shí)鐘周期中斷一次。如選擇周期喚醒時(shí)鐘源為1Hz信號(hào)時(shí),若設(shè)置次值為0,則每一秒發(fā)生一次喚醒中斷。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-854853.html
2.開(kāi)啟周期喚醒中斷
3.重寫回調(diào)函數(shù),并獲取時(shí)間日期(需同時(shí)獲取,否則時(shí)間會(huì)鎖死)
void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
?????? RTC_TimeTypeDef??????? sTime;
?????? RTC_DateTypeDef??????? sDate;
?????? HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BIN);????
sprintf(Uart6RxBuffer,"Time:%02d:%02d:%02d\t",sTime.Hours,sTime.Minutes,sTime.Seconds);
?????? HAL_UART_Transmit(&huart6,(uint8_t *)Uart6RxBuffer,strlen(Uart6RxBuffer), 100);
?????? HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BIN);
?????sprintf(Uart6RxBuffer, "Date:20%02d-%02d-%02d\r\n",sDate.Year,sDate.Month,sDate.Date);
?????? HAL_UART_Transmit(&huart6,(uint8_t *)Uart6RxBuffer,strlen(Uart6RxBuffer), 100);
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854853.html
到了這里,關(guān)于STM32使用內(nèi)部時(shí)鐘配置RTC,設(shè)置并讀取時(shí)間、鬧鐘和周期喚醒的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!