Files
CHJ/user/MCU/lhl_rtc.c

65 lines
2.2 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#include "../main/SystemInclude.h"
2026-03-20 21:19:04 +08:00
void RTC_SEC_Init(void)
2026-03-20 21:16:58 +08:00
{
2026-03-20 21:19:04 +08:00
RTC_InitTypeDef RTC_InitStructure;
/* 1. <20><>ʼ<EFBFBD><CABC>RTC<54><43><EFBFBD><EFBFBD> */
RTC_InitStructure.ClockSource = RCC_RTCCLKSource_LSI; // RTCʱ<43><CAB1>ԴLSI
RTC_InitStructure.Prescaler = 32767; // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) = 1S
RTC_InitStructure.Counter = 0; // <20><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
RTC_InitStructure.Alarm = 10; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>10S
LHL_RTC_Init(&RTC_InitStructure);
/* 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
LHL_RTC_ITConfig(RTC_IT_SECIE, ENABLE);
NVIC_EnableIRQ(RTC_IRQn); // <20><><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>RTC_IRQn<51><6E><EFBFBD><EFBFBD>
2026-03-20 21:16:58 +08:00
}
2026-03-20 21:19:04 +08:00
void RTC_ALR_Init(void)
2026-03-20 21:16:58 +08:00
{
2026-03-20 21:19:04 +08:00
RTC_InitTypeDef RTC_InitStructure;
/* 1. <20><>ʼ<EFBFBD><CABC>RTC<54><43><EFBFBD><EFBFBD> */
RTC_InitStructure.ClockSource = RCC_RTCCLKSource_LSI; // RTCʱ<43><CAB1>ԴLSI
RTC_InitStructure.Prescaler = 32767; // RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) = 1S
RTC_InitStructure.Counter = 0; // <20><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
RTC_InitStructure.Alarm = 5-1; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>5S
LHL_RTC_Init(&RTC_InitStructure);
/* 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
LHL_RTC_ITConfig(RTC_IT_ALRIE, ENABLE);
NVIC_EnableIRQ(RTCAlarm_IRQn); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>RTCAlarm_IRQn<51><6E><EFBFBD><EFBFBD>
2026-03-20 21:16:58 +08:00
}
2026-03-20 21:19:04 +08:00
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
//<2F><><EFBFBD>ж<EFBFBD>
2026-03-20 21:16:58 +08:00
void RTC_IRQHandler(void)
{
uint32_t Time_Count;
2026-03-20 21:19:04 +08:00
if (LHL_RTC_GetPending(RTC_FLAG_SECF) == SET)
{
// <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD>жϱ<D0B6>־
LHL_RTC_ClearPending(RTC_FLAG_SECF);
// <20><>ȡ<EFBFBD><C8A1>ǰRTC <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ӡ
LHL_RTC_GetCounter(&Time_Count);
// printf("%d\n", Time_Count);
}
2026-03-20 21:16:58 +08:00
}
2026-03-20 21:19:04 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
2026-03-20 21:16:58 +08:00
void RTCAlarm_IRQHandler(void)
{
2026-03-20 21:19:04 +08:00
uint32_t Time_Count;
if (LHL_RTC_GetPending(RTC_FLAG_ALRF) == SET)
{
LHL_RTC_ClearPending(RTC_FLAG_ALRF); // <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
LHL_RTC_GetCounter(&Time_Count); // <20><>ȡ<EFBFBD><C8A1>ǰRTC <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ӡ
LHL_RTC_SetAlarm(Time_Count+4); // <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ǰʱ<C7B0><CAB1>+5S
// printf("Alarm is ringing: %d\n", Time_Count);
}
2026-03-20 21:16:58 +08:00
}