打印
[STM32]

进入stop模式后,stm32运行了一段时间后无法正常工作

[复制链接]
796|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abs0213|  楼主 | 2020-3-10 09:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的STM32L051进行低功耗STOP休眠后,一分钟后利用RTC唤醒,为什么运行了一段时间后就不能运行了,串口也没有打印出信息了,但重新上电后就可以正常运行,请各位大佬相助!!!

使用特权

评论回复
评论
abs0213 2020-3-11 07:47 回复TA
@hobbye501 :下面是源程序,麻烦您看下 
abs0213 2020-3-11 07:39 回复TA
@hobbye501 :你好,因为是个浸水检测报警项目,规定是用3.6V,3.5AH的电池供电,又在电脑上运行了一晚上,又出现那种不运行的情况了,白天时都是正常的也没有管它,一到晚上就出问题了 
hobbye501 2020-3-10 10:03 回复TA
@abs0213 :你试试用标准直流源 
abs0213 2020-3-10 09:58 回复TA
@hobbye501 :我用的是3.6V的电池供电 
hobbye501 2020-3-10 09:58 回复TA
是不是供电低了? 

相关帖子

沙发
abs0213|  楼主 | 2020-3-11 07:44 | 只看该作者
本帖最后由 abs0213 于 2020-3-11 07:45 编辑

这是退出休眠后的时钟和外设的还原
void clock_config_after_stop(void)
{
    /* Enable Power Control clock */
    __HAL_RCC_PWR_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOH_CLK_ENABLE();
    HAL_ADC_MspInit(&hadc);
    __HAL_RCC_ADC1_CLK_ENABLE();
    __HAL_RCC_DMA1_CLK_ENABLE();
    HAL_UART_MspInit(&huart1);
    HAL_UART_MspInit(&hlpuart1);
    __HAL_RCC_LPUART1_CLK_ENABLE();
    __HAL_RCC_USART1_CLK_ENABLE();
    HAL_TIM_Base_MspInit(&htim2);
    __HAL_RCC_TIM2_CLK_ENABLE();

    /* The voltage scaling allows optimizing the power consumption when the device is
       clocked below the maximum system frequency, to update the voltage scaling value
       regarding system frequency refer to product datasheet.  */
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    SystemClock_Config();
    HAL_ADCEx_EnableVREFINT();
    HAL_ADC_Init(&hadc);
    HAL_DMA_Init(&hdma_adc);
    MX_DMA_Init();
    MX_ADC_Init();
    HAL_ADC_MspInit(&hadc);
    HAL_UART_Receive_IT(&hlpuart1,(uint8_t *)&lpuart1.receive_temp,1);//接收LPUART的数�????
    HAL_TIM_Base_Start_IT(&htim2);//�????启定时器2
    HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED);//ADC校准
    HAL_ADC_Start_DMA(&hadc,(uint32_t *)&adcBuf,15);
    flag = 1;
}

使用特权

评论回复
板凳
abs0213|  楼主 | 2020-3-11 07:46 | 只看该作者
这是进入休眠时的IO和外设的配置
void system_config_before_stop(void)
{
        GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* Enable Ultra low power mode */
    HAL_PWREx_EnableUltraLowPower();

    /* Enable the fast wake up from Ultra low power mode */
    HAL_PWREx_EnableFastWakeUp();

    /* Select HSI as system clock source after Wake Up from Stop mode */
    __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI);
    //PB2.3.4
    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    //pc15
    GPIO_InitStruct.Pin = GPIO_PIN_15;
        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
        //PH0.1
        GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
    //关闭时钟
    HAL_ADC_MspDeInit(&hadc);
    __HAL_RCC_ADC1_CLK_DISABLE();
    __HAL_RCC_DMA1_CLK_DISABLE();
    HAL_UART_MspDeInit(&huart1);
    HAL_UART_MspDeInit(&hlpuart1);
    __HAL_RCC_USART1_CLK_DISABLE();
    __HAL_RCC_LPUART1_CLK_DISABLE();
    __HAL_RCC_GPIOA_CLK_DISABLE();
        __HAL_RCC_GPIOB_CLK_DISABLE();
        __HAL_RCC_GPIOC_CLK_DISABLE();
        __HAL_RCC_GPIOH_CLK_DISABLE();
        HAL_TIM_Base_MspDeInit(&htim2);
        __HAL_RCC_TIM2_CLK_DISABLE();
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝