我试图在stm32f4发现上配置唤醒事件,我正在使用coocox中的一点修改示例。
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
RTC_WriteProtectionCmd(DISABLE);
RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div8);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();
RTC_InitTypeDef rtcinit;
rtcinit.RTC_HourFormat = RTC_HourFormat_24;
rtcinit.RTC_AsynchPrediv = 99;
rtcinit.RTC_SynchPrediv = 9999;
RTC_Init(&rtcinit);
EXTI_ClearITPendingBit(EXTI_Line22);
EXTI_InitStructure.EXTI_Line = EXTI_Line22;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
RTC_SetWakeUpCounter(0x0);
RTC_ITConfig(RTC_IT_WUT, ENABLE);
RTC_WakeUpCmd(ENABLE);
RTC_TimeTypeDef time;
RTC_TimeStructInit(&time);
time.RTC_Hours = 12;
RTC_SetTime(RTC_Format_BIN,&time);
我遇到的问题是中断永远不会发生。 RTC本身运行得很好。
似乎我忘了使用
RTC_ClearFlag(RTC_FLAG_WUTF);
RTC_ClearITPendingBit(RTC_IT_WUT);
后
RTC_WakeUpCmd(ENABLE);
现在它应该可行,但奇怪的问题从这里开始
我正在使用这个库 https://github.com/xenovacivus/STM32DiscoveryVCP
用于USB VCP。
我注意到,当我删除
时USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb, &USR_cb);
唤醒工作正常,但是当我使用此功能时,中断仅发生一次,两次或从不(基于二极管闪烁),具体取决于我放置它的位置(在其他外围设备的初始化之间进行测试)
答案 0 :(得分:1)
在文件usb_bsp.c
中,注释
RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE);
它对我有用。问候。