목차
[WAT-STM32-2.8] 28번 예제 RTC(Real Time Clock) 실험
WAT-STM32-2.8 예제 중 28번으로 RTC 를 사용하여 시계를 만드는 예제입니다.
RTC 초기화
RTC_NVIC_Configuration();
RTC 인터럽트 루틴
void RTC_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
{
/* Clear the RTC Second interrupt */
RTC_ClearITPendingBit(RTC_IT_SEC);
/* Toggle LED1 */
WAT_STM32_LEDToggle(LED1);
/* Enable time update */
TimeDisplay = 1;
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
/* Reset RTC Counter when Time is 23:59:59 */
if (RTC_GetCounter() == 0x00015180)
{
RTC_SetCounter(0x0);
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
}
}
}
현재 시간 출력
void Time_Display(uint32_t TimeVar)
{
to_tm(TimeVar, &systmtime);
printf("\n %d %d %d (%s) %0.2d:%0.2d:%0.2d",
systmtime.tm_year, systmtime.tm_mon, systmtime.tm_mday,
WEEK_STR[systmtime.tm_wday], systmtime.tm_hour,
systmtime.tm_min, systmtime.tm_sec);
}
주요 코드
main.c 파일 일부입니다.
// WAT_STM3228_27 Analog to Digital 실험
// 출처: https://docs.whiteat.com/?p=4343
//
/* Infinite loop */
while (1)
{
if (TimeDisplay == 1) /* If 1s has paased */
{
/* Display current time */
Time_Display(RTC_GetCounter());
TimeDisplay = 0;
/* LED1 TOGGLE */
WAT_STM32_LEDToggle(LED2);
}
}
결과화면
1초 마다 LED1, LED2 가 ON/OFF 되면서 UART로 현재 시간을 출력합니다.



WAT-STM32-2.8보드 전체 예제
제품 구매
WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.

