基于stm32f4xx的RTC实时时钟代码
时间: 2023-10-03 11:03:23 浏览: 179
物联网项目实战开发之基于STM32的RTC实时时钟程序代码
5星 · 资源好评率100%
以下是基于STM32F4xx的RTC实时时钟代码,包括初始化和设置时间的函数:
```c
#include "stm32f4xx.h"
void RTC_Init(void)
{
/* 使能PWR和BKP的时钟 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* 解锁BKP区域 */
PWR_BackupAccessCmd(ENABLE);
/* 复位BKP区域 */
BKP_DeInit();
/* 使能LSE时钟 */
RCC_LSEConfig(RCC_LSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{
}
/* 选择LSE作为RTC时钟源 */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* 使能RTC时钟 */
RCC_RTCCLKCmd(ENABLE);
/* 等待RTC同步 */
RTC_WaitForSynchro();
/* 设置RTC预分频器 */
RTC_SetPrescaler(32767);
/* 等待RTC同步 */
RTC_WaitForSynchro();
}
void RTC_SetTime(uint8_t hour, uint8_t minute, uint8_t second)
{
RTC_TimeTypeDef RTC_TimeStructure;
/* 等待RTC同步 */
RTC_WaitForSynchro();
/* 设置RTC时间 */
RTC_TimeStructure.RTC_Hours = hour;
RTC_TimeStructure.RTC_Minutes = minute;
RTC_TimeStructure.RTC_Seconds = second;
RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
/* 等待RTC同步 */
RTC_WaitForSynchro();
}
```
在主函数中,可以先调用RTC初始化函数,然后再调用RTC设置时间函数,例如:
```c
int main(void)
{
/* 初始化RTC */
RTC_Init();
/* 设置RTC时间为12:34:56 */
RTC_SetTime(12, 34, 56);
while (1)
{
}
}
```
需要注意的是,RTC模块需要连接外部低速晶振(LSE),并且需要在STM32的RCC寄存器中设置LSE作为RTC时钟源。同时,还需要在PWR寄存器中解锁BKP区域,才能够使用RTC模块。
阅读全文