RTC移植时注意两点
(1)RTC需要中断函数。每秒中断一次,更新需要显示的标志。
(2)RTC运行中校正时间,更新RTC_CNTx时不能直接调用Time_Adjust()函数,需要开启PWR 和 BKP 时钟,且允许访问BKP域。
void RTC_SetCurrentTime(struct rtc_time *tm)
{
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);
Time_Adjust(tm);
RCC_ClearFlag();
}
RTC的配置代码如下:
/**
******************************************************************************
* 文件名程: bsp_rtc.c
* 作 者: 硬石嵌入式开发团队
* 版 本: V1.0
* 编写日期: 2015-10-04
* 功 能: 实时时钟底层驱动程序
******************************************************************************
* 说明:
* 本例程配套硬石stm32开发板YS-F1Pro使用。
*
* 淘宝:
* 论坛:http://www.ing10bbs.com
* 版权归硬石嵌入式开发团队所有,请勿商用。
******************************************************************************
*/
/* 包含头文件 ----------------------------------------------------------------*/
#include "bsp/usart/bsp_usartx.h"
#include "bsp/rtc/bsp_rtc.h"
/* 私有类型定义 --------------------------------------------------------------*/
/* 私有宏定义 ----------------------------------------------------------------*/
/* 私有变量 ------------------------------------------------------------------*/
/*星期,生肖用文字ASCII码*/
uint8_t const *WEEK_STR[] = {"日", "一", "二", "三", "四", "五", "六"};
uint8_t const *zodiac_sign[] = {"猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗"};
/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
void Time_Adjust(struct rtc_time *tm);
static uint8_t USART_Scanf(uint32_t value);
void Time_Regulate(struct rtc_time *tm);
/* 函数体 --------------------------------------------------------------------*/
/**
* 函数功