F103RCT6进入低功耗后有时候程序仍然运行

2019-07-21 07:27发布

  使用的HAL库,HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);进入停止模式后,有的时候LED灯还是闪烁,只不过是闪烁的频率比没进入停止模式之前慢了好多,不知道是怎么回事,请大神看一下



while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
               
        HAL_Delay(1000);
        HAL_GPIO_TogglePin(GPIOB, LED1_Pin);
                printf("停止模式 ");
        sys_conter++;       
        if(sys_conter%5==0)
        {
                printf("停止模式 ");
                EXT_CON++;
        }
        if(sys_conter%3==0)
        {
                HAL_GPIO_TogglePin(GPIOB, LED2_Pin);
                HAL_GPIO_WritePin(COM_PWR_GPIO_Port, COM_PWR_Pin, GPIO_PIN_RESET);           //给232芯片上电
                ADC_ConvertedValueLocal =(float)ADC_ConvertedValue*3.3/4096;
                flexiforce_R =3.3*20/ADC_ConvertedValueLocal; // V(out) = Rref * Vcc / R;  Rref=20K  Vcc=3.3V
                printf("AD转换原始值 = 0x%04X ", ADC_ConvertedValue);
                printf("计算得出电压值 = %f V ",ADC_ConvertedValueLocal);
                printf("计算得出电池电压值 = %f V ",ADC_ConvertedValueLocal/0.09090909);
        }
        if(sys_conter>=30)    //30秒
        {
                printf("CESHI ");
                HAL_GPIO_WritePin(COM_PWR_GPIO_Port, COM_PWR_Pin, GPIO_PIN_RESET);           //给232芯片上电
                BAT_BUF[9]=((ADC_ConvertedValueLocal/0.09090909)*100)/(25.2-18);
                BAT_BUF[10]=crc8(BAT_BUF,10);
                HAL_UART_Transmit(&huart5,(uint8_t*)BAT_BUF,11,1000);         //发送电量
                sys_conter=0;
        }
       
//        printf("OK ");
       
        if(EXT_FLAG)                                             //休眠后上电蜂鸣器响一下
        {
                HAL_GPIO_WritePin(GPIOB,BEEP_Pin,GPIO_PIN_SET);
                HAL_Delay(400);
                HAL_GPIO_WritePin(GPIOB,BEEP_Pin,GPIO_PIN_RESET);
                EXT_FLAG=0;
                HAL_GPIO_WritePin(GPIOB, SPEAK_PWR_Pin,GPIO_PIN_SET);
        }
        if(USART_RX_STA&0x8000)
        {
                 HAL_UART_Transmit(&huart4,(uint8_t*)USART_RX_BUF,DATA_LEN+2,100);
                 date_pro();//数据处理
                 USART_RX_STA=0;
        }                       
        if(EXT_CON>=2) //18三分钟
        {
               
                HAL_Delay(1000);
                HAL_UART_Transmit(&huart5,(uint8_t*)OFF_BUF,11,1000);                          //发送断电指令
                HAL_UART_Transmit(&huart2,(uint8_t*)SPEAK_BUF1,8,1000);     //语音播报即将断电
//                printf("即将断电 ");
                HAL_Delay(9000);
                if(EXT_CON>=2)
                {
                        HAL_UART_Transmit(&huart2,(uint8_t*)SPEAK_BUF2,8,1000);     //语音播报即将断电
                  HAL_Delay(1000);
                        MX_GPIO_Init2();
                        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
                        EXT_CON=0;
                }
        }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
1208
1楼-- · 2019-07-21 11:22
一般停止模式,灯是不会闪的
你参考这个帖子看下:http://www.openedv.com/forum.php ... d=283325&extra=
路人曦
2楼-- · 2019-07-21 15:01
你这应该是没进去停止模式,低功耗分别有 睡眠,停止,关闭,三种,停止跟关闭各项IO都是要关掉的,你进入了停止模式灯是不会闪的。
看一下是否正常进入了停止模式,还是说压根没进到停止模式。。
lvkanger
3楼-- · 2019-07-21 16:13
是不是被唤醒了呢?
影腾
4楼-- · 2019-07-21 18:05
 精彩回答 2  元偷偷看……
路人曦
5楼-- · 2019-07-21 22:26
影腾 发表于 2018-11-27 13:37
怎么看进没进入停止模式,只是有时候灯会闪,灯闪的时候也是很慢速的闪

你看data sheet上面有介绍,你具体查一下停止模式各IO口的状态,去确定一下有没有进入到停止模式,还有就是测电压,不管是休眠还是停止还是关闭,都会有明显的降低幅度。

一周热门 更多>