打印
[MM32硬件]

【灵动微电子MM32F0121测评】4.打印时间戳

[复制链接]
1072|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 阿源玩电子 于 2025-6-25 20:54 编辑

打印时间戳

1.rtc外设初始化

<div class="blockcode"><blockquote>void RTC_Configure(void)
{
   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_RTC | RCC_APB1Periph_BKP, ENABLE);
    PWR_BackupAccessCmd(ENABLE);  
    BKP_DeInit();                 


    if (BKP_ReadBackupRegister(BKP_DR1) != 0x5D5D)
    {

        RCC_LSEConfig(RCC_LSE_ON);
        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);

        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
        RCC_RTCCLKCmd(ENABLE);

        RTC_WaitForSynchro();
        RTC_WaitForLastTask();
        RTC_SetPrescaler(32767);
        RTC_WaitForLastTask();

        uint32_t init_seconds = DateToSeconds(RTC_BASE_YEAR, RTC_BASE_MONTH,
                                            RTC_BASE_DATE, 0, 0, 0);
        RTC_SetCounter(init_seconds);
        RTC_WaitForLastTask();

        RTC_ITConfig(RTC_IT_SEC, ENABLE);
        RTC_WaitForLastTask();

        BKP_WriteBackupRegister(BKP_DR1, 0x5D5D);
    }
    else
    {
        RTC_WaitForSynchro();
        RTC_ITConfig(RTC_IT_SEC, ENABLE);
        RTC_WaitForLastTask();
    }

    NVIC_InitTypeDef NVIC_InitStruct;
    NVIC_InitStruct.NVIC_IRQChannel = RTC_BKP_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);
}

2.获取日期函数
void RTC_GetDate(RTC_DateTypeDef* date)
{
    uint32_t counter = RTC_GetCounter();

    uint32_t days = counter / 86400;

    date->RTC_WeekDay = (days + RTC_BASE_WEEKDAY) % 7;

    date->RTC_Year = RTC_BASE_YEAR;

    static const uint8_t month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    uint8_t month;
    for (month = 0; month < 12; month++) {
        uint8_t days_in_month = month_days[month];
        
        if (month == 1 && IsLeapYear(RTC_BASE_YEAR)) {
            days_in_month = 29;
        }
        
        if (days >= days_in_month) {
            days -= days_in_month;
        } else {
            break;
        }
    }
    date->RTC_Month = month + 1;
    date->RTC_Date = days + 1;
}
4.获取时间函数

void RTC_GetTime(RTC_TimeTypeDef* time)
{
    uint32_t counter = RTC_GetCounter();
   
    time->RTC_Seconds = counter % 60;
    counter /= 60;
    time->RTC_Minutes = counter % 60;
    counter /= 60;
    time->RTC_Hours = counter % 24;
}


5.打印函数
void Get_RTC_Time() 
{
    RTC_DateTypeDef date;
    RTC_TimeTypeDef time;
    uint32_t counter = RTC_GetCounter();
    RTC_GetDate(&date);
    RTC_GetTime(&time);
   
    printf("RTC Counter: %lu\r\n", counter);
    printf("Days: %lu\r\n", counter / 86400);
    printf("Current: %04d-%02d-%02d %02d:%02d:%02d Week:%d\r\n",
           date.RTC_Year, date.RTC_Month, date.RTC_Date,
           time.RTC_Hours, time.RTC_Minutes, time.RTC_Seconds,
           date.RTC_WeekDay);
}
6.试验现象




使用特权

评论回复
沙发
AdaMaYun| | 2025-7-31 17:46 | 只看该作者
打印时间戳

使用特权

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

本版积分规则

12

主题

32

帖子

0

粉丝