打印
[RISC-V MCU 应用开发]

【RISC-V MCU CH32V103测评】RTC电子时钟

[复制链接]
743|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在CH32V103的内部设置有RTC计时器,将它与OLED屏结合,就可构成一个RTC电子时钟。
实现电子时钟的程序十分简单,其程序代码如下:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
RTC_Init();
GPIO_Toggle_INIT();
OLED_Init();
OLED_Clear();
OLED_ShowString(10,0,"CH32V103",16);
OLED_ShowString(10,2,"RTC TEST",16);
OLED_ShowString(10,6,"  :   :",16);
while(1)
{
Delay_Ms(500);
RTC_Get();
OLED_ShowNum(10,6,calendar.hour,2,16);
OLED_ShowNum(40,6,calendar.min,2,16);
OLED_ShowNum(70,6,calendar.sec,2,16);
}
}

相应的RTC初始化函数为:
u8 RTC_Init(void)
{
u8 temp=0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);      
PWR_BackupAccessCmd(ENABLE);
if(BKP_ReadBackupRegister(BKP_DR1) != 0xA1A1)
{                                 
BKP_DeInit();  
RCC_LSEConfig(RCC_LSE_ON);      
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET&&temp<250)     
{
temp++;
Delay_Ms(20);
}
if(temp>=255)return 1;
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);               
RCC_RTCCLKCmd(ENABLE);   
RTC_WaitForLastTask();
RTC_WaitForSynchro();           
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RTC_EnterConfigMode();
RTC_SetPrescaler(32767);
RTC_WaitForLastTask();
RTC_Set(2020,11,8,13,58,55); /* Setup Time */   
RTC_ExitConfigMode();
BKP_WriteBackupRegister(BKP_DR1, 0XA1A1);   
}
else
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);   
PWR_WakeUpPinCmd(DISABLE);
RTC_WaitForSynchro();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
}
RTC_NVIC_Config();
RTC_Get();
return 0;
}

经程序编译下载后,其运行效果如图所示。
                              
RTC电子时钟

使用特权

评论回复

相关帖子

沙发
zeshoufx| | 2020-11-6 08:38 | 只看该作者
谢谢分享【RTC电子时钟】

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2020-11-6 09:00 | 只看该作者
zeshoufx 发表于 2020-11-6 08:38
谢谢分享【RTC电子时钟】

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

464

主题

2780

帖子

38

粉丝