你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用停止模式后不能进入待机模式

[复制链接]
江湖书生 提问时间:2017-10-19 13:50 /
本帖最后由 江湖书生 于 2017-10-19 14:04 编辑

想法:先进入停止模式若干秒,唤醒后工作,然后再进入待机模式。主循环重复这个过程。但是实际情况是:只能进入一次待机状态,后续就只进停止模式,不进待机状态。请大家帮忙看看,代码如下(只贴出相关代码)。//--主循环--
int main(void)
{
  HAL_Init();       
        SystemPower_Config();
        SystemClock_Config();
        MX_RTC_Init();
        if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB))
        {
                __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
                __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
                HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
        }
       
        MX_GPIO_Init();
        MX_LPUART1_UART_Init();               
  //MX_ADC_Init();
  MX_USART1_UART_Init();
                 
  while(1)
  {
                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
                OutTime();
                HAL_Delay(500);
                CollectAI();
                ProcessAI();
                HAL_Delay(500);
                //ReportData();
                StandbySystem();
        }
}

//--电源配置--
void SystemPower_Config(void)
{
  HAL_PWREx_EnableUltraLowPower();                               
  HAL_PWREx_EnableFastWakeUp();                               
  __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_StopWakeUpClock_MSI);
}

//--待机等待--
void StandbySystem(void)
{       
        uint8_t u8Buf[2]={0x88,0x88};
       
        if(HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 20, RTC_WAKEUPCLOCK_CK_SPRE_16BITS)!=HAL_OK)
        {
                HAL_UART_Transmit(&hlpuart1,u8Buf,2,50);
        }
  else HAL_PWR_EnterSTANDBYMode();                                                                                                                                                                                                               
}

//--停机等待(1~32秒)--
void StopSystem(uint16_t StopTime)
{
        uint32_t u32Time;
        if(StopTime==0) return;
        if(StopTime>=32) u32Time=0xFFFF;
        else u32Time=(StopTime<<11);
        HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,u32Time,RTC_WAKEUPCLOCK_RTCCLK_DIV16);
        HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);
}

//--RTC唤醒中断回调函数--
void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
        HAL_RTCEx_DeactivateWakeUpTimer(hrtc);
}

//--采集AI通道--
static void CollectAI(void)
{
        HAL_GPIO_WritePin(En15V_Port,En15V_Pin,GPIO_PIN_SET);                       
        HAL_GPIO_WritePin(EnBatTest_Port,EnBatTest_Pin,GPIO_PIN_SET);       
        //StopSystem(5);
        //SystemClock_Config();
        HAL_Delay(2000);
        MX_ADC_Init();
        u8CvtIndex=0;
        HAL_ADC_Start_IT(&hadc);
        while(u8CvtIndex<3)
        {
                HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
        }
        HAL_ADC_Stop_IT(&hadc);
        HAL_GPIO_WritePin(En15V_Port,En15V_Pin,GPIO_PIN_RESET);       
        HAL_GPIO_WritePin(EnBatTest_Port,EnBatTest_Pin,GPIO_PIN_RESET);
}



收藏 评论5 发布时间:2017-10-19 13:50

举报

5个回答
回答时间:2017-10-19 16:22:15
复位以后这个也清除不掉,需要手动清除。我测试407是这样的。
该标志由软件写零清除。
软件必须在 WUTF 再次置 1 的 1.5 个 RTCCLK 周期之前将该标志清零。
回答时间:2017-10-19 14:34:32
楼主,我看了一下RTCwakeup以后,没有再次设置下次唤醒时间。加上这个再测试一下。
江湖书生 回答时间:2017-10-19 15:42:04
安 发表于 2017-10-19 14:34
楼主,我看了一下RTCwakeup以后,没有再次设置下次唤醒时间。加上这个再测试一下。 ...

谢谢您!
直接原因是PWR_CSR寄存器中的WUF标志置位,且进入待机时未清除。
江湖书生 回答时间:2017-10-19 15:48:44
但是仍然有疑惑:WUF标志是怎么设置上的?待机唤醒后执行复位流程,在程序开始处会检查是否待机复位,如果是会清除WUF标志(代码如下);
if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB))
{
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
        HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
}
进入停止模式,被唤醒定时器唤醒后,中断处理回调函数中也会清除WUF标志(代码如下)
void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    HAL_RTCEx_DeactivateWakeUpTimer(hrtc);
}
xiaosanguo 回答时间:2018-3-8 16:23:30
楼主你好!能把你的源程序发我看一下吗?初学者对这方面很感兴趣,想多了解了解。谢谢了!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版