stm32f407 rtc实验获取时间日期,定时闹钟一分钟的程序例程
时间: 2023-05-20 08:06:16 浏览: 211
以下是一个获取时间日期和定时闹钟一分钟的程序例程:
```c
#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rtc.h"
#include "stm32f4xx_exti.h"
#include "misc.h"
void RTC_Config(void);
void RTC_AlarmConfig(void);
void RTC_TimeRegulate(uint8_t hh, uint8_t mm, uint8_t ss);
void RTC_DateRegulate(uint8_t yy, uint8_t mm, uint8_t dd, uint8_t w);
int main(void)
{
RTC_Config();
RTC_TimeRegulate(12, 0, 0); // 设置时间为 12:00:00
RTC_DateRegulate(21, 6, 1, 2); // 设置日期为 2021 年 6 月 1 日,星期二
RTC_AlarmConfig(); // 设置定时闹钟为 1 分钟后
while (1)
{
// 等待闹钟触发
}
}
void RTC_Config(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();
}
void RTC_AlarmConfig(void)
{
RTC_AlarmTypeDef RTC_AlarmStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeStructInit(&RTC_TimeStructure);
RTC_TimeStructure.RTC_Hours = 0;
RTC_TimeStructure.RTC_Minutes = 1;
RTC_TimeStructure.RTC_Seconds = 0;
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_DateStructInit(&RTC_DateStructure);
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
RTC_AlarmStructure.RTC_AlarmDateWeekDay = RTC_DateStructure.RTC_Date + 1;
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = RTC_TimeStructure.RTC_Hours;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = RTC_TimeStructure.RTC_Minutes;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = RTC_TimeStructure.RTC_Seconds + 1;
RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);
RTC_ITConfig(RTC_IT_ALRA, ENABLE);
EXTI_ClearITPendingBit(EXTI_Line22);
NVIC_EnableIRQ(RTC_Alarm_IRQn);
}
void RTC_TimeRegulate(uint8_t hh, uint8_t mm, uint8_t ss)
{
RTC_TimeTypeDef RTC_TimeStructure;
RTC_TimeStructInit(&RTC_TimeStructure);
RTC_TimeStructure.RTC_Hours = hh;
RTC_TimeStructure.RTC_Minutes = mm;
RTC_TimeStructure.RTC_Seconds = ss;
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
}
void RTC_DateRegulate(uint8_t yy, uint8_t mm, uint8_t dd, uint8_t w)
{
RTC_DateTypeDef RTC_DateStructure;
RTC_DateStructInit(&RTC_DateStructure);
RTC_DateStructure.RTC_Year = yy;
RTC_DateStructure.RTC_Month = mm;
RTC_DateStructure.RTC_Date = dd;
RTC_DateStructure.RTC_WeekDay = w;
RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure);
}
void RTC_Alarm_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_ALRA) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_ALRA);
// 闹钟触发后的操作
}
}
```
这是一个基于 STM32F407 的 RTC 实验程序,可以获取当前时间日期并设置定时闹钟。在程序中,我们首先需要进行 RTC 的配置,然后设置时间和日期,最后设置定时闹钟并等待其触发。当闹钟触发后,可以在 RTC_Alarm_IRQHandler 函数中进行相应的操作。
阅读全文