调试过程:
STOP模式休眠功耗0.52mA
1.去掉ADC上拉电阻,对功耗无影响
2.去掉LED灯可以降低0.25mA
3.取消I2C,串口,ADC对功耗影响不大
4.取消DIO0~DIO3,RELAY ,影响不大
5.SPI,LRST对功耗影响不大
6.取消OLED屏幕初始化对功耗影响不大
7.取消DMA,ADC,串口初始化对功耗影响不大
8.去掉LDO,AT24C02存储芯片对功耗影响不大
主函数如下:
while(1)
{
while(!(HAL_GetTick()-node_rec_time > 10000 && NetStatus == JIONDONE))//时间到达&&入网完成才退出任务进入休眠
{
SlaveSendTask(); //节点发送数据任务
}
/*1.lora模块等待10s之后进入睡眠模式*/
SX1276LoRaSetOpMode( RFLR_OPMODE_SLEEP ); //注释掉(不休眠)是1.88mA,加入此句(休眠)是0.7uA,在rtc回调函数里面在改为标准模式
/*2.配置引脚为模拟输入,不上拉,(SPI、LRST还是默认状态)*/
usart_deinit(&huart1); /*配置串口引脚为模拟*/
usart_deinit(&huart2);
i2c_deinit(&hi2c2); /*配置I2C引脚为模拟*/
adc_deinit(&hadc); /*配置I2C引脚为模拟*/
gpio_deinit(); /*配置GPIO引脚为模拟(含时钟引脚)*/
/*2.MCU设置为STOP模式*/
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/*3.时间到达后,RTC中断唤醒MCU,LORA配置为标准模式*/
SystemClock_Config();
SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); /*唤醒lora,进入标准模式*/
/*4.初始化*/
//MX_GPIO_Init(); /*不能初始化所有GPIO*/
gpio_init(); /*部分GPIO初始化*/
MX_USART1_UART_Init(); /*串口初始化*/
HAL_UART_MspInit(&huart1);
HAL_I2C_MspInit(&hi2c2); /*i2c初始化*/
MX_I2C2_Init();
HAL_ADC_MspInit(&hadc); /*adc初始化*/
MX_ADC_Init();
}