本帖最后由 jinglixixi 于 2022-5-23 23:31 编辑
在开发板的例程中,提供了RTC的测试程序,它是通过串口来显示输出内容,并可用串口来设置RTC的初试值及闹钟提示参数,其测试效果如图1所示。
图1测试效果
在进行程序修改后,则可实现计时功能,效果如图2所示。
图2 RTC计时
修改后的显示函数为:
void rtc_show_time(void)
{
rtc_current_time_get(&rtc_initpara);
time_subsecond = rtc_subsecond_get();
printf("Current time: %0.2x:%0.2x:%0.2x \r\n", \
rtc_initpara.rtc_hour, rtc_initpara.rtc_minute, rtc_initpara.rtc_second);
}
相应的主程序为:
int main(void)
{
systick_config();
usart0_gpio_config();
usart0_config();
printf("\n\r ****************** RTC calendar alarm demo ******************\n\r");
rcu_periph_clock_enable(RCU_PMU);
pmu_backup_write_enable();
rtc_pre_config();
if(BKP_VALUE != RTC_BKP0) {
rtc_setup();
} else {
if(RESET != rcu_flag_get(RCU_FLAG_PORRST)) {
printf("power on reset occurred....\n\r");
} else if(RESET != rcu_flag_get(RCU_FLAG_EPRST)) {
printf("external reset occurred....\n\r");
}
printf("no need to configure RTC....\n\r");
rtc_flag_clear(RTC_STAT_ALRM0F);
exti_flag_clear(EXTI_17);
rtc_show_time();
rtc_show_alarm();
}
while(1){
rtc_show_time();
delay_1ms(1000);
}
}
在添加OLED屏显示驱动的情况下,只需修改显示程序即可实现图3所示的显示效果。
相应的显示函数为:
void rtc_show_time(void)
{
rtc_current_time_get(&rtc_initpara);
time_subsecond = rtc_subsecond_get();
OLED_ShowNum(20,4,rtc_initpara.rtc_hour/16*10+rtc_initpara.rtc_hour%16,2,16);
OLED_ShowNum(44,4,rtc_initpara.rtc_minute/16*10+rtc_initpara.rtc_minute%16,2,16);
OLED_ShowNum(68,4,rtc_initpara.rtc_second/16*10+rtc_initpara.rtc_second%16,2,16);
}
图3 RTC电子时钟
配合前面介绍过的RTC参数设置,就可构成一个完整的RTC电子时钟。
|