本文来自面包板社区《灵动 Mini-F5333开发板》免费测评活动。
1. 复制OLED显示工程,重命为RTC_clock。
2.
复制一份官方例程RTC_Calendar中的rt_calendar.c/h到新工程的RTC文件夹下。
3.
把rt_calendar.c添加到工程中的RTC分组中,并把头文件添另进工程。
4.
根据编译的提示,添加hal_rtc、hal_bkp、hal_pwr、hal_misc等必需的驱动库。
在mm32f5330_it.c中添加rtc的中断函数:
/***********************************************************************************************************************
* @brief This function handles RTC Handler
* @note none
* @param none
* @retval none
*********************************************************************************************************************/
void RTC_IRQHandler(void)
{
if (RESET != RTC_GetITStatus(RTC_IT_SEC))
{
RTC_UpdateCalendar();
RTC_PrintDateTime();
RTC_ClearITPendingBit(RTC_IT_SEC);
RTC_WaitForLastTask();
}
}
下载好程序后,我们在开发板上看到了串口打印出来的日期时间:
5. 在main.c中,我们添加显示时间的函数代码如下:
#include "platform.h"
#include "main.h"
#include "oled.h"
#include "rtc_calendar.h"
#include "string.h"
#include
extern uint8_t rtc_state;
extern RTC_CalendarTypeDef RTC_Calendar;
char data_buff[] = "2024-01-07";
char time_buff[] = "01:01:01";
int main(void)
{
PLATFORM_Init();
RTC_Configure();
OLED_Init();
OLED_ShowStr(10,0,"MM32F5330!",2);
OLED_RefreshRAM();
while (1)
{
if(rtc_state == 1)
{
rtc_state = 0;
sprintf(data_buff,"%04d-%02d-%02d",RTC_Calendar.year,RTC_Calendar.month, RTC_Calendar.day);
sprintf(time_buff,"%02d:%02d:%02d", RTC_Calendar.hour, RTC_Calendar.minute, RTC_Calendar.second);
OLED_ShowStr(10,16,data_buff,2);
OLED_ShowStr(10,32,time_buff,2);
OLED_RefreshRAM();
PLATFORM_LED_Toggle(LED1);
}
}
}
添加动态显示的时钟draw_rolling_clock.c到工程中,并把头文件添加进工程,在主函数中,我们添加代码如下:
#define _MAIN_C_
#include "platform.h"
#include "main.h"
#include "oled.h"
#include "rtc_calendar.h"
#include "string.h"
#include
extern uint8_t rtc_state;
extern RTC_CalendarTypeDef RTC_Calendar;
char data_buff[] = "2024-01-07";
char time_buff[] = "01:01:01";
extern uint8_t H1,H2,M1,M2,S1,S2;
int