diff --git a/src/rtc.c b/src/rtc.c --- a/src/rtc.c +++ b/src/rtc.c @@ -4,6 +4,7 @@ #include "stm32f0xx_hal.h" #include "rtc.h" +#include "gpio.h" RTC_HandleTypeDef hrtc; @@ -11,6 +12,12 @@ RTC_HandleTypeDef hrtc; static void Error_Handler(void) { volatile uint8_t crap = 1; + + for(uint16_t i=0; i<300; i++) + { + HAL_GPIO_TogglePin(LED_BLUE); + HAL_Delay(100); + } } // Initialize RTC @@ -23,12 +30,14 @@ void rtc_init(void) RTC_DateTypeDef sDate; RTC_AlarmTypeDef sAlarm; + HAL_PWR_EnableBkUpAccess(); + hrtc.Instance = RTC; hrtc.Init.HourFormat = RTC_HOURFORMAT_24; hrtc.Init.AsynchPrediv = 124; hrtc.Init.SynchPrediv = 322; // if this has enough bits should be 1.0018Hz based on 40kHz LSI hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; - hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; + hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; if (HAL_RTC_Init(&hrtc) != HAL_OK) @@ -48,8 +57,8 @@ void rtc_init(void) sDate.WeekDay = RTC_WEEKDAY_MONDAY; sDate.Month = RTC_MONTH_JANUARY; - sDate.Date = 0x1; - sDate.Year = 0x0; + sDate.Date = 0x01; + sDate.Year = 0x19; if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK) { @@ -67,18 +76,22 @@ void rtc_init(void) sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET; // Alarm will trigger on the Xth second of every minute - sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY | RTC_ALARMMASK_HOURS | RTC_ALARMMASK_MINUTES; + sAlarm.AlarmMask = RTC_ALARMMASK_ALL; // Trigger every second for now sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL; sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; - sAlarm.AlarmDateWeekDay = 0x1; + sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY; sAlarm.Alarm = RTC_ALARM_A; - if (HAL_RTC_SetAlarm(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK) + if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK) { Error_Handler(); } HAL_NVIC_SetPriority(RTC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(RTC_IRQn); + + HAL_RTC_WaitForSynchro(&hrtc); + + } void rtc_cal(void)