stm32 RTC唤醒定时器中断LL

stm32 RTC唤醒定时器中断LL,stm32,nucleo,low-level-api,Stm32,Nucleo,Low Level Api,玩核子板g070,我试着用RTC的唤醒定时器设置每秒钟一次的中断。但是,我在CubeMX生成的头文件(stm32g0xx.h)中没有找到相应的中断。我试图只使用LL,因为我想了解如何在较低级别处理中断。 我按照如下方式设置RTC: LL_RTC_InitTypeDef RTC_InitStruct = {0}; /* Peripheral clock enable */ LL_RCC_EnableRTC(); LL_APB1_GRP1_EnableClock(LL_APB1_G

玩核子板g070,我试着用RTC的唤醒定时器设置每秒钟一次的中断。但是,我在CubeMX生成的头文件(stm32g0xx.h)中没有找到相应的中断。我试图只使用LL,因为我想了解如何在较低级别处理中断。 我按照如下方式设置RTC:

  LL_RTC_InitTypeDef RTC_InitStruct = {0};

  /* Peripheral clock enable */
  LL_RCC_EnableRTC();
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_RTC);

  RTC_InitStruct.HourFormat = LL_RTC_HOURFORMAT_24HOUR;
  RTC_InitStruct.AsynchPrescaler = 127;
  RTC_InitStruct.SynchPrescaler = 255;
  LL_RTC_Init(RTC, &RTC_InitStruct);

  // Auto-wakeup interrupt configuration
  LL_RTC_DisableWriteProtection(RTC);
  LL_RTC_WAKEUP_Disable(RTC);
  while (LL_RTC_IsActiveFlag_WUTW(RTC) != 1);
  // Configure second wakeup timer
  LL_RTC_WAKEUP_SetAutoReload(RTC, 0x8000);
  LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);
  LL_RTC_EnableIT_WUT(RTC);
  LL_RTC_WAKEUP_Enable(RTC);
  LL_RTC_SetAlarmOutEvent(RTC, LL_RTC_ALARMOUT_WAKEUP);
  LL_RTC_EnableWriteProtection(RTC);
然后我尝试设置NVIC,但在IRQn_类型枚举中找不到相应的IRQ

NVIC_SetPriority(?, 1);
NVIC_EnableIRQ(?);
更新:

似乎RTC_TAMP_IRQHandler同时作为唤醒中断(??)。将唤醒时钟设置为LL_RTC_WAKEUPCLOCK_CKSPRE(或LL_RTC_WAKEUPCLOCK_CKSPRE_WUT)似乎不起作用,但如果使用LL_RTC_WAKEUPCLOCK_DIV_16,则会发生中断。要重置中断,我只需清除唤醒中断标志(?)


任何人都可以解释为什么它是这样工作的?

这是一个EXTI中断。好的,但是哪一个?阅读参考手册我确实阅读了它,但没有发现与RTC唤醒计时器相关的EXTI中断的参考。虽然在这个文档()中,我发现了一些东西:
唤醒备用函数输出,可以路由到RTC2的RTC_ALARM和RTC3的TAMPALRM输出(报警A、报警B或唤醒事件的唯一pad)具有可配置的极性。
但我仍然不了解时钟分频器或特定唤醒中断的要点。通常为exti第20行。这是一个exti中断。确定,但哪一个?阅读参考手册我确实阅读了它,但没有发现与RTC唤醒计时器相关的exti中断的参考。虽然在这个文档()中,我发现了一些东西:
唤醒备用函数输出,可以路由到RTC2的RTC_ALARM和RTC3的TAMPALRM输出(报警A、报警B或唤醒事件的唯一pad)具有可配置的极性。
但我仍然不理解时钟分频器或特定唤醒中断的意义。通常是exti第20行。
void RTC_TAMP_IRQHandler(void)
{
  LL_RTC_ClearFlag_WUT(RTC);
  LL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
}