一.RTC可以选择使用外部32768HZ晶振或芯片内部32768HZ(区别是精度不同)外部:20ppm以内 外部:0.04%-0.1%(400ppm-1000ppm)。
LClk32K_Select(Clk32K_LSI); //启用内部32K 精度0.04%-0.1%(400ppm-1000ppm
LClk32K_Select(Clk32K_LSE); //启用外部32K 精度20ppm 推荐晶体参数32768hz 12.5pf 20ppm R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1; R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2; R8_CK32K_CONFIG |= RB_CLK_XT32K_PON; //给外部32K上电 R8_SAFE_ACCESS_SIG = 0;
二.RTC时间初始化
RTC_InitTime(2023,9,20,12,00,00); //初始化RTC时间
三.RTC有两种模式进入中断(定时模式和触发模式)定时模式有八档可选,若挡位不符合应用,可用触发模式,时间可自由配置,32768为1s。
RTC_TMRFunCfg(Period_1_S); //定时模式 共八档可配置
RTC_TRIGFunCfg(32768*1); //触发方式 32768为1s
四.中断服务函数使能
PFIC_EnableIRQ(RTC_IRQn); //中断服务使能
五.睡眠唤醒使能
PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Edge_LongDelay ); //RTC使能唤醒功能
六.中断服务函数
__attribute__((interrupt("WCH-Interrupt-fast"))) __attribute__((section(".highcode"))) void RTC_IRQHandler(void) { UINT16 py; UINT16 pmon; UINT16 pd; UINT16 ph; UINT16 pm; UINT16 ps; RTC_GetTime(&py,&pmon,&pd,&ph,&pm,&ps); if (RTC_GetITFlag(RTC_TRIG_EVENT)) { printf("%d年%d月%d日%d时%d分%d秒\r\n",py,pmon,pd,ph,pm,ps); RTC_TRIGFunCfg(32768*1); RTC_ClearITFlag(RTC_TRIG_EVENT); } if (RTC_GetITFlag(RTC_TMR_EVENT)) { printf("%d年%d月%d日%d时%d分%d秒\r\n",py,pmon,pd,ph,pm,ps); RTC_ClearITFlag(RTC_TMR_EVENT); } }
可联系官方FAE获取例程。