gd32F470配置RTC时钟

rtc.c

cpp 复制代码
#include "rtc.h"

#define BKP_VALUE    0x32F0

rtc_parameter_struct   rtc_initpara;
__IO uint32_t prescaler_a = 0, prescaler_s = 0;
uint32_t RTCSRC_FLAG = 0;

ErrStatus RtcInit(void)
{
    rcu_periph_clock_enable(RCU_PMU); /* enable PMU clock */
    pmu_backup_write_enable();/* enable the access of the RTC registers */
    rtc_pre_config();//配置外部低速时钟32.768KHz
    RTCSRC_FLAG = GET_BITS(RCU_BDCTL, 8, 9);/* get RTC clock entry selection */

    if ((BKP_VALUE != RTC_BKP0) || (0x00 == RTCSRC_FLAG))/* check if RTC has aready been configured */
	{ 
        return rtc_setup(); 
    }
	return SUCCESS;
}
void rtc_pre_config(void)
{
	rcu_osci_on(RCU_LXTAL);
	rcu_osci_stab_wait(RCU_LXTAL);
	rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);

	prescaler_s = 0xFF;
	prescaler_a = 0x7F;
	rcu_periph_clock_enable(RCU_RTC);
	rtc_register_sync_wait();
}
ErrStatus rtc_setup(void)
{
    rtc_initpara.factor_asyn = prescaler_a;
    rtc_initpara.factor_syn = prescaler_s;
    rtc_initpara.year = 0x24;//2024年
    rtc_initpara.day_of_week = RTC_MONDAY;//星期一
    rtc_initpara.month = RTC_FEB;//二月
    rtc_initpara.date = 0x05;//五日
    rtc_initpara.display_format = RTC_24HOUR;
    rtc_initpara.am_pm = RTC_AM;

	rtc_initpara.hour = 0x09;//9点
	rtc_initpara.minute = 0x52;//52分
	rtc_initpara.second = 0x00;//0秒
	
    if(ERROR == rtc_init(&rtc_initpara))
	{
        return ERROR;
    }
	else
	{
        RTC_BKP0 = BKP_VALUE;
    }
	return SUCCESS;
}
void rtc_show_time(void)
{
    rtc_current_time_get(&rtc_initpara); 
	printf("Current date: %0.2x/%0.2x/%0.2x   \r\n", \
          rtc_initpara.year, rtc_initpara.month, rtc_initpara.date);	
    printf("Current time: %0.2x:%0.2x:%0.2x   \r\n", \
          rtc_initpara.hour, rtc_initpara.minute, rtc_initpara.second);
}

rtc.h

cpp 复制代码
#ifndef __RTC_H
#define __RTC_H

#include "head.h"

ErrStatus RtcInit(void);
void rtc_show_time(void);
void rtc_pre_config(void);
ErrStatus rtc_setup(void);

#endif

main.c

cpp 复制代码
#include "head.h"

int main(void)
{
    systick_config();//时钟配置
	gd_485_com_init(PCS_COM,9600);
	gd_485_com_en(1);//发送使能

    RtcInit();

    while(1)
	{
		rtc_show_time();
		delay_1ms(1000);
	}
}
相关推荐
见闻小天地7 小时前
晶威特32.768KHz谐振器深度解析:笔记本RTC晶振的产业逻辑与技术样本
实时音视频
ItJavawfc9 小时前
Linux驱动-RTC-RX8010集成-驱动开发-系统移植-移植RX8010驱动
驱动开发·rtc·8010rtc 驱动移植
Multipath7124 天前
乾元通基于原生UDP时隙感知的多链路聚合方案
网络·网络协议·5g·安全·udp·智能路由器·实时音视频
java_logo5 天前
Docker 部署 SRS:轻松搭建实时音视频流媒体平台
docker·容器·webrtc·实时音视频·rtmp·http-flv·轩辕镜像
hz567896 天前
视频会议终端音视频系统搭建方案:高清视频会议终端厂家选型指南
硬件架构·实时音视频·信息与通信·智能硬件
深圳市宝华视联10 天前
医院内网部署手术示教系统注意事项
嵌入式硬件·实时互动·音视频·实时音视频·视频编解码·嵌入式实时数据库
Funny_AI_LAB12 天前
Sparrow-2:超越轮流发言,迈向全场景对话理解
人工智能·语言模型·语音识别·实时音视频
Multipath71212 天前
5G CPE vs 5G聚合路由器 该怎么选
网络·5g·安全·智能路由器·实时音视频·信息与通信
Multipath71215 天前
多链路聚合设备-应急指挥车实战通信保障方案
网络·5g·安全·智能路由器·实时音视频
深圳市宝华视联16 天前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库