STM32H750XB_RT-THREAD/43-RTC实时时钟/RTC—日历实验/User/rtc/bsp_rtc.c

186 lines
5.2 KiB
C
Raw Permalink Normal View History

2025-07-21 06:34:29 +00:00
/**
******************************************************************************
* @file main.c
* @author fire
* @version V1.0
* @date 2019-xx-xx
* @brief RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
* @attention
*
* ʵ<EFBFBD><EFBFBD>ƽ̨:Ұ<EFBFBD><EFBFBD> STM32H743 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>̳ :http://www.firebbs.cn
* <EFBFBD>Ա<EFBFBD> :http://firestm32.taobao.com
*
******************************************************************************
*/
#include "stm32h7xx.h"
#include "./RTC/bsp_rtc.h"
#include "./usart/bsp_usart.h"
#include "./lcd/bsp_lcd.h"
#include "./led/bsp_led.h"
#include "./beep/bsp_beep.h"
RTC_HandleTypeDef Rtc_Handle;
__IO uint8_t Alarmflag =0;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void RTC_TimeAndDate_Set(void)
{
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeTypeDef RTC_TimeStructure;
// <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>
RTC_TimeStructure.TimeFormat = RTC_H12_AMorPM;
RTC_TimeStructure.Hours = HOURS;
RTC_TimeStructure.Minutes = MINUTES;
RTC_TimeStructure.Seconds = SECONDS;
HAL_RTC_SetTime(&Rtc_Handle,&RTC_TimeStructure, RTC_FORMAT_BIN);
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RTC_DateStructure.WeekDay = WEEKDAY;
RTC_DateStructure.Date = DATE;
RTC_DateStructure.Month = MONTH;
RTC_DateStructure.Year = YEAR;
HAL_RTC_SetDate(&Rtc_Handle,&RTC_DateStructure, RTC_FORMAT_BIN);
HAL_RTCEx_BKUPWrite(&Rtc_Handle,RTC_BKP_DRX, RTC_BKP_DATA);
}
/**
* @brief <EFBFBD><EFBFBD>ʾʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void RTC_TimeAndDate_Show(void)
{
uint8_t Rtctmp=0;
char LCDTemp[100];
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
while(1)
{
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
HAL_RTC_GetTime(&Rtc_Handle, &RTC_TimeStructure, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&Rtc_Handle, &RTC_DateStructure, RTC_FORMAT_BIN);
// ÿ<><C3BF><EFBFBD><EFBFBD>ӡһ<D3A1><D2BB>
if(Rtctmp != RTC_TimeStructure.Seconds)
{
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
printf("The Date : Y:20%0.2d - M:%0.2d - D:%0.2d - W:%0.2d\r\n",
RTC_DateStructure.Year,
RTC_DateStructure.Month,
RTC_DateStructure.Date,
RTC_DateStructure.WeekDay);
//Һ<><D2BA><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
//<2F>Ȱ<EFBFBD>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sprintf<74><66><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD><D2BA><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
sprintf(LCDTemp,"The Date : Y:20%0.2d - M:%0.2d - D:%0.2d - W:%0.2d",
RTC_DateStructure.Year,
RTC_DateStructure.Month,
RTC_DateStructure.Date,
RTC_DateStructure.WeekDay);
LCD_SetColors(LCD_COLOR_RED,LCD_COLOR_BLACK);
LCD_DisplayStringLine_EN_CH(8,(uint8_t *)LCDTemp);
// <20><>ӡʱ<D3A1><CAB1>
printf("The Time : %0.2d:%0.2d:%0.2d \r\n\r\n",
RTC_TimeStructure.Hours,
RTC_TimeStructure.Minutes,
RTC_TimeStructure.Seconds);
//Һ<><D2BA><EFBFBD><EFBFBD>ʾʱ<CABE><CAB1>
sprintf(LCDTemp,"The Time : %0.2d:%0.2d:%0.2d",
RTC_TimeStructure.Hours,
RTC_TimeStructure.Minutes,
RTC_TimeStructure.Seconds);
LCD_DisplayStringLine_EN_CH(10,(uint8_t *)LCDTemp);
(void)RTC->DR;
}
Rtctmp = RTC_TimeStructure.Seconds;
}
}
/**
* @brief RTC<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ѡ<EFBFBD><EFBFBD>RTCʱ<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC_CLK<EFBFBD>ķ<EFBFBD>Ƶϵ<EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void RTC_CLK_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
// <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD>
Rtc_Handle.Instance = RTC;
/*ʹ<><CAB9> PWR ʱ<><CAB1>*/
__HAL_RCC_RTC_ENABLE();
/* PWR_CR:DBF<42><46>1<EFBFBD><31>ʹ<EFBFBD><CAB9>RTC<54><43>RTC<54><43><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>SRAM<41>ķ<EFBFBD><C4B7><EFBFBD> */
HAL_PWR_EnableBkUpAccess();
#if defined (RTC_CLOCK_SOURCE_LSI)
/* ʹ<><CAB9>LSI<53><49>ΪRTCʱ<43><CAB1>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Ĭ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>LSE<EFBFBD><EFBFBD>ΪRTC<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Դ
*/
/* <20><>ʼ<EFBFBD><CABC>LSI */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* ѡ<><D1A1>LSI<53><49>ΪRTC<54><43>ʱ<EFBFBD><CAB1>Դ */
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
#elif defined (RTC_CLOCK_SOURCE_LSE)
/* <20><>ʼ<EFBFBD><CABC>LSE */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.LSIState = RCC_LSI_OFF;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* ѡ<><D1A1>LSE<53><45>ΪRTC<54><43>ʱ<EFBFBD><CAB1>Դ */
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
/* Configures the External Low Speed oscillator (LSE) drive capability */
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH);
#endif /* RTC_CLOCK_SOURCE_LSI */
/* ʹ<><CAB9>RTCʱ<43><CAB1> */
__HAL_RCC_RTC_ENABLE();
/* <20>ȴ<EFBFBD> RTC APB <20>Ĵ<EFBFBD><C4B4><EFBFBD>ͬ<EFBFBD><CDAC> */
HAL_RTC_WaitForSynchro(&Rtc_Handle);
/*=====================<3D><>ʼ<EFBFBD><CABC>ͬ<EFBFBD><CDAC>/<2F>첽Ԥ<ECB2BD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ֵ======================*/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ck_spare = LSE/[(255+1)*(127+1)] = 1HZ */
/* <20><><EFBFBD><EFBFBD><EFBFBD>첽Ԥ<ECB2BD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ֵ */
Rtc_Handle.Init.AsynchPrediv = ASYNCHPREDIV;
/* <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ֵ */
Rtc_Handle.Init.SynchPrediv = SYNCHPREDIV;
Rtc_Handle.Init.HourFormat = RTC_HOURFORMAT_24;
/* <20><>RTC_InitStructure<72><65><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>RTC<54>Ĵ<EFBFBD><C4B4><EFBFBD> */
if (HAL_RTC_Init(&Rtc_Handle) != HAL_OK)
{
printf("\n\r RTC ʱ<>ӳ<EFBFBD>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> \r\n");
}
}
/**********************************END OF FILE*************************************/