[STM32F1] STM32F103跳过进入停止模式

[复制链接]
1891|38
chuxh 发表于 2021-5-7 22:33 | 显示全部楼层
否则停止模式的进入流程将会被跳过,程序继续运行。
 楼主| dingy 发表于 2021-5-7 22:35 | 显示全部楼层
这个我当时加了也还是不正常,最后我把systick关了之后,就ok了,你可以去试试
dengdc 发表于 2021-5-7 22:37 | 显示全部楼层

    RCC_DeInit();
    TIM_DeInit(TIM3);
    TIM_DeInit(TIM1);
    ADC_DeInit(ADC1);
    USART_DeInit(USART1);
    GPIO_DeInit(GPIOA);
    GPIO_DeInit(GPIOB);
    GPIO_DeInit(GPIOC);
    DMA_DeInit(DMA1_Channel1);        
    DMA_DeInit(DMA1_Channel5);
   
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,DISABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,DISABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,DISABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, DISABLE);
    EXTI_ClearITPendingBit(0x7ffff);
    RTC_ClearITPendingBit(0x07);
    PWR_WakeUpPinCmd(ENABLE);            
    PWR_EnterSTANDBYMode();
    __WFI();
我都写成这了,还不行。真奇怪。我的systick根本就没有用。
huangchui 发表于 2021-5-7 22:39 | 显示全部楼层

遇到同样的问题。求解
zhenykun 发表于 2021-5-7 22:42 | 显示全部楼层
我刚开始也是碰到问题,进入STOP模式后电流30mA。而且只能进入一次STOP模式,后来重新焊接一块板,一个一个外围增加,每增加一个外围测一次电流,最后把电流降到6.9uA,只能进入一次STOP模式是因为外部中断没有清掉。
zhenykun 发表于 2021-5-7 22:44 | 显示全部楼层
我刚开始也是碰到问题,进入STOP模式后电流30mA。而且只能进入一次STOP模式,后来重新焊接一块板,一个一个ww增加,每增加一个外围测一次电流,最后把电流降到6.9uA,只能进入一次STOP模式是因为外部中断没有清掉。
zhenykun 发表于 2021-5-7 22:44 | 显示全部楼层
我刚开始也是碰到问题,进入STOP模式后电流30mA。而且只能进入一次STOP模式,后来重新焊接一块板,一个一个WW增加,每增加一个WW测一次电流,最后把电流降到6.9uA,只能进入一次STOP模式是因为外部中断没有清掉。
zhenykun 发表于 2021-5-7 22:47 | 显示全部楼层
目前还在调试阶段我没有开启RTC,电流也能降到6.9uA而且其他WW在低功耗时也是有几uA电流的
juventus9554 发表于 2021-5-7 22:51 | 显示全部楼层
在外部中断函数中清除中断标志
renyaq 发表于 2021-5-7 22:53 | 显示全部楼层
我也遇到过这个问题
解决方法是 清除中断标志
我的设备有一个中断 是可以关闭的, 但是io口状态变化时还是可以产生中断标志,
所以在睡眠前要清除干净
renyaq 发表于 2021-5-7 22:55 | 显示全部楼层

                                        __HAL_RCC_GPIOA_CLK_DISABLE();
                                        __HAL_RCC_GPIOB_CLK_DISABLE();
                        
                                        HAL_NVIC_DisableIRQ(EXTI9_5_IRQn);

                                        while (__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_6))
                                                        __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_6);

                                        /* Enter STOP 1 mode */
                                        HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
lizye 发表于 2021-5-7 22:59 | 显示全部楼层
如果确认清除了所有 IT PENDING FLAG.还有一个终极手段:
在进STOP函数前加SysTick->CTRL  = 0; 关TICKER中断
在唤醒中断中首先SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;   
开启TICKER.这个TICKER是所有的库函数必需使用的,除非所有代码你自己写。
 楼主| dingy 发表于 2021-5-7 23:02 | 显示全部楼层

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先
嵌入小菜菜 发表于 2021-5-7 23:13 | 显示全部楼层
指针跑飞了吧?
paotangsan 发表于 2021-6-2 09:18 | 显示全部楼层
还需要清除别的吗
renzheshengui 发表于 2021-6-2 09:19 | 显示全部楼层
滴答时钟是必须要关掉的吗
wakayi 发表于 2021-6-2 09:22 | 显示全部楼层
有关闭的顺序要求吗
wowu 发表于 2021-6-2 09:25 | 显示全部楼层
能关掉的都关掉
xiaoqizi 发表于 2021-6-2 09:26 | 显示全部楼层
长知识了 以后 一定要注意啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部