问题描述
使用核板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_Type枚举中找不到对应的IRQ。
NVIC_SetPriority(?,1);
NVIC_EnableIRQ(?);
更新:
似乎RTC_TAMP_IRQHandler会随着唤醒中断(??)加倍。将唤醒时钟设置为LL_RTC_WAKEUPCLOCK_CKSPRE(或LL_RTC_WAKEUPCLOCK_CKSPRE_WUT)似乎不起作用,但是如果我使用LL_RTC_WAKEUPCLOCK_DIV_16,则会发生中断。要重置中断,我只需要清除唤醒中断标志(??)
void RTC_TAMP_IRQHandler(void)
{
LL_RTC_ClearFlag_WUT(RTC);
LL_GPIO_TogglePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin);
}
任何人都可以解释为什么会这样吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)