本帖最后由 lich0205 于 2017-12-21 14:09 编辑 为了降低功耗周期性的使芯片进入待机状态,在设定时间使用WKUP事件唤醒,在执行完设定动作之后再次进入待机状态,再唤醒,如此往复。 现在出现的问题是,第一次进入待机状态之后能够待机到设定时间(比如30s)然后唤醒芯片,程序重新开始执行,然而再次进入待机状态之后芯片立即就被唤醒从头开始执行程序了,感觉是哪里的标志没有复位,但是不确定 RTC初始化代码: void MX_RTC_Init(void) { RTC_TimeTypeDef sTime; RTC_DateTypeDef sDate; /**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.OutPutRemap = RTC_OUTPUT_REMAP_NONE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; if (HAL_RTC_Init(&hrtc) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Initialize RTC and set the Time and Date */ if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){ sTime.Hours = 0x0; sTime.Minutes = 0x0; sTime.Seconds = 0x0; sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; sTime.StoreOperation = RTC_STOREOPERATION_RESET; if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } sDate.WeekDay = RTC_WEEKDAY_MONDAY; sDate.Month = RTC_MONTH_JANUARY; sDate.Date = 0x1; sDate.Year = 0x0; if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2); } } 进入待机模式代码: if((1 == PWR_Standby_In_Flg) && (1 == USART_CallBack_Ok)) { if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 60, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } HAL_PWR_EnterSTANDBYMode(); } 望指点,谢谢! |
STM32L011D4芯片用SWD无法下载程序
求助:STM32L0系列标准库哪里下?
STM32L051低温时LPUART串口波特率异常
STM32L051单片机ADC如何彻底关闭?
STM32L051C8进入低功耗模式电流偏大
STM32L052C8T6通过I2C模拟读16位数
STM32L0的VLCD外接5V会有问题吗
求助!!使用STM32L073 IO口模拟IIC接口读写AT24CM01 程序不停...
STM32L072RB写Bank2 EEPROM不响应中断
STM32L031无法进入boot
如安版主所说,建议使用STOPMode,如果想降低功耗,
建议用RTC Alarm进行定时唤醒或者Wakeup事件唤醒另外,建议楼主的标题修改一下,
《STM32L073待机唤醒导致复位》,这样直接就能看出你想问什么了!
版主大哥,可能我描述问题不是很清楚。容我再解释一下哈。
我想实现功能是这样的:
上电复位开始工作-->进入待机状态-->第一次待机30s-->退出待机,复位开始工作-->再次进入待机-->第二次待机30s-->退出待机,复位开始工作-->再次进入待机-->第三次待机30s-->退出待机,复位开始工作-->再次进入待机... 这样一个无限循环往复的过程。
但是现在调试出来的情况是:
上电复位开始工作-->进入待机状态-->第一次待机30s-->退出待机,复位开始工作-->再次进入待机-->第二次待机只有0s-->退出待机,复位开始工作-->进入待机状态-->第三次待机也只有0s-->退出待机,复位开始工作-->再次进入待机...
也就是说只有第一次待机的时间达到了目的,待机了30s,但是第一次以后,第二次第三次第四次...进入待机之后没有延时就被立即复位运行,是为什么第二,第三,第四次。。。进入待机之后为什么没有延时的问题,就是不知道是不是第一次复位之后,RTC的外设里有些寄存器不受复位影响,导致后来的待机没有延时,但是由于进入待机之后除RTC都断电了,仿真器会掉线,在线调试看不到复位之后的寄存器的状态,因此特别迷惑
可能我之前描述的不是很清楚,容我再解释一下,现在使用的就是wakeup事件定时唤醒
我想实现功能是这样的:
上电复位开始工作-->进入待机状态-->第一次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机-->第二次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机-->第三次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机... 这样一个无限循环往复的过程。
但是现在调试出来的情况是:
上电复位开始工作-->进入待机状态-->第一次待机30s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机-->第二次待机只有0s-->wakeup事件唤醒退出待机,复位开始工作-->进入待机状态-->第三次待机也只有0s-->wakeup事件唤醒退出待机,复位开始工作-->再次进入待机...
也就是说只有第一次待机的时间达到了目的,待机了30s,但是第一次以后,第二次第三次第四次...进入待机之后没有延时就被立即复位运行,是为什么第二,第三,第四次。。。进入待机之后为什么没有延时的问题,就是不知道是不是第一次复位之后,RTC的外设里有些寄存器不受复位影响,导致后来的待机没有延时,但是由于进入待机之后除RTC都断电了,仿真器会掉线,在线调试看不到复位之后的寄存器的状态,因此特别迷惑
24小时已过,请楼主自行修改标题,修改原因:标题不合格。
否则会关闭该帖子!
已经改好了
已经改好了
试过清除中断标志,没有用
额,我是想用唤醒后复位的,现在是待机时间不够,刚进入待机状态就立即复位了..