cancel
Showing results for 
Search instead for 
Did you mean: 

RTC alarm interrupt not being generated on my stm32h745I Disc board

Tkhan.1
Associate

I have followed examples provided but not able to generate interrupt for alarm. I just need a simple alarm interrupt to toggle the LED. Is there something i am doing wrong here:

int main(void)
 
{
 
 /* USER CODE BEGIN 1 */
 
 
 
 /* USER CODE END 1 */
 
/* USER CODE BEGIN Boot_Mode_Sequence_0 */
 
 int32_t timeout;
 
/* USER CODE END Boot_Mode_Sequence_0 */
 
 
 
/* USER CODE BEGIN Boot_Mode_Sequence_1 */
 
 /* Wait until CPU2 boots and enters in stop mode or timeout*/
 
 timeout = 0xFFFF;
 
 while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
 
 if ( timeout < 0 )
 
 {
 
 Error_Handler();
 
 }
 
/* USER CODE END Boot_Mode_Sequence_1 */
 
 /* MCU Configuration--------------------------------------------------------*/
 
 
 
 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 
 HAL_Init();
 
 
 
 /* USER CODE BEGIN Init */
 
 
 
 /* USER CODE END Init */
 
 
 
 /* Configure the system clock */
 
 SystemClock_Config();
 
/* USER CODE BEGIN Boot_Mode_Sequence_2 */
 
/* When system initialization is finished, Cortex-M7 will release Cortex-M4 by means of
 
HSEM notification */
 
/*HW semaphore Clock enable*/
 
__HAL_RCC_HSEM_CLK_ENABLE();
 
/*Take HSEM */
 
HAL_HSEM_FastTake(HSEM_ID_0);
 
/*Release HSEM in order to notify the CPU2(CM4)*/
 
HAL_HSEM_Release(HSEM_ID_0,0);
 
/* wait until CPU2 wakes up from stop mode */
 
timeout = 0xFFFF;
 
while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) == RESET) && (timeout-- > 0));
 
if ( timeout < 0 )
 
{
 
Error_Handler();
 
}
 
/* USER CODE END Boot_Mode_Sequence_2 */
 
 
 
 /* USER CODE BEGIN SysInit */
 
 
 
 /* USER CODE END SysInit */
 
 
 
 /* Initialize all configured peripherals */
 
 MX_GPIO_Init();
 
 MX_RTC_Init();
 
 /* USER CODE BEGIN 2 */
 
 
 
 /* USER CODE END 2 */
 
 
 
 /* Infinite loop */
 
 /* USER CODE BEGIN WHILE */
 
 while (1)
 
 {
 
  /* USER CODE END WHILE */
 
 
 
  /* USER CODE BEGIN 3 */
 
 }
 
 /* USER CODE END 3 */
 
}
 
 
 
 
 
static void MX_RTC_Init(void)
 
{
 
 
 
 /* USER CODE BEGIN RTC_Init 0 */
 
 
 
 /* USER CODE END RTC_Init 0 */
 
 
 
 RTC_TimeTypeDef sTime = {0};
 
 RTC_DateTypeDef sDate = {0};
 
 RTC_AlarmTypeDef sAlarm = {0};
 
 
 
 /* USER CODE BEGIN RTC_Init 1 */
 
 
 
 /* USER CODE END RTC_Init 1 */
 
 /** Initialize RTC Only
 
 */
 
 hrtc.Instance = RTC;
 
 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
 
 hrtc.Init.AsynchPrediv = 127;
 
 hrtc.Init.SynchPrediv = 255;
 
 hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
 
 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
 
 hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
 
 hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
 
 if (HAL_RTC_Init(&hrtc) != HAL_OK)
 
 {
 
  Error_Handler();
 
 }
 
 
 
 /* USER CODE BEGIN Check_RTC_BKUP */
 
 
 
 /* USER CODE END Check_RTC_BKUP */
 
 
 
 /** Initialize RTC and set the Time and Date
 
 */
 
 sTime.Hours = 11;
 
 sTime.Minutes = 0;
 
 sTime.Seconds = 0;
 
 sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
 
 sTime.StoreOperation = RTC_STOREOPERATION_RESET;
 
 if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
 
 {
 
  Error_Handler();
 
 }
 
 sDate.WeekDay = RTC_WEEKDAY_FRIDAY;
 
 sDate.Month = RTC_MONTH_OCTOBER;
 
 sDate.Date = 1;
 
 sDate.Year = 21;
 
 if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
 
 {
 
  Error_Handler();
 
 }
 
 /** Enable the Alarm A
 
 */
 
 sAlarm.AlarmTime.Hours = 11;
 
 sAlarm.AlarmTime.Minutes = 0;
 
 sAlarm.AlarmTime.Seconds = 30;
 
 sAlarm.AlarmTime.SubSeconds = 0;
 
 sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
 
 sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
 
 sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
 
 sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
 
 sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
 
 sAlarm.AlarmDateWeekDay = 1;
 
 sAlarm.Alarm = RTC_ALARM_A;
 
 if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK)
 
 {
 
  Error_Handler();
 
 }
 
 /* USER CODE BEGIN RTC_Init 2 */
 
 
 
 /* USER CODE END RTC_Init 2 */
 
 
 
}
 
 
 
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
 
{
 
 HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
 
 HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
 
}
 
 
 
void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
 
{
 
 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
 
 if(hrtc->Instance==RTC)
 
 {
 
 /* USER CODE BEGIN RTC_MspInit 0 */
 
 
 
 /* USER CODE END RTC_MspInit 0 */
 
 /** Initializes the peripherals clock
 
 */
 
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
 
  PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
 
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
 
  {
 
   Error_Handler();
 
  }
 
 
 
  /* Peripheral clock enable */
 
  __HAL_RCC_RTC_ENABLE();
 
  /* RTC interrupt Init */
 
  HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0, 0);
 
  HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
 
 /* USER CODE BEGIN RTC_MspInit 1 */
 
 
 
 /* USER CODE END RTC_MspInit 1 */
 
 }
 
 
 
}void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
 
{
 
 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
 
 if(hrtc->Instance==RTC)
 
 {
 
 /* USER CODE BEGIN RTC_MspInit 0 */
 
 
 
 /* USER CODE END RTC_MspInit 0 */
 
 /** Initializes the peripherals clock
 
 */
 
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
 
  PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
 
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
 
  {
 
   Error_Handler();
 
  }
 
 
 
  /* Peripheral clock enable */
 
  __HAL_RCC_RTC_ENABLE();
 
  /* RTC interrupt Init */
 
  HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0, 0);
 
  HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
 
 /* USER CODE BEGIN RTC_MspInit 1 */
 
 
 
 /* USER CODE END RTC_MspInit 1 */
 
 }
 
 
 
}

0 REPLIES 0