打印

stm32f0系列进入睡眠模式的困惑

[复制链接]
1312|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
百川入海|  楼主 | 2020-10-29 23:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用STM32F030F4P6做产品,现在是可以进入待机模式,使用RTC唤醒,然后能发送数据工作。
现在想让产品初始上电后先进入休眠,然后在RTC唤醒后,再发送数据;但是现在只要上电就直接发送数据,然后才进入休眠。
通过查看PWR->CSR寄存器,看到RM手册中说SBF和WUF位是可以用来判断是否从待机模式中醒来的,但是程序这么做了不起作用,还是上电就发送数据。
请各位大佬给看看可能因为什么导致的。
int main(void)
{
  /* MCU Configuration--------------------------------------------------------*/

        HAL_Init();


  /* Configure the system clock */

  SystemClock_Config();
        
  MX_GPIO_Init();

  MX_RTC_Init();
        
  RTC_AlarmConfig();
  /* USER CODE BEGIN SysInit */

  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET )        //在此判断SBF标志位,若为1,则表明是被唤醒过
  //if(__HAL_PWR_GET_FLAG(PWR_FLAG_WU)!= RESET)
{
        __HAL_RCC_GPIOA_CLK_ENABLE();
        MX_SPI1_Init();
        Lora_init();
        //HAL_Delay(10000);
        Read_Ds18b20();
        Lora_SendTemp1();
  }
  __HAL_RCC_PWR_CLK_ENABLE();

  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
{
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
  }
        
  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);

if (__HAL_PWR_GET_FLAG(PWR_FLAG_WU) != RESET)
  HAL_PWR_EnterSTANDBYMode();
  while (1)
  {
               
  }
}

通过查看数据手册,说有2个标志位,一个是用来说明曾进入待机模式;另一个是曾被唤醒过,通过判断这个,认为设备进入过待机模式,那么就可以发送数据;若没进入过,那就先进入待机,不发数据。
这2个我都尝试了,没起作用,请大家指点。

使用特权

评论回复
沙发
zhouyong77| | 2020-10-30 08:15 | 只看该作者
你进入休眠模式的语句应该放到初始化函数后面

使用特权

评论回复
板凳
hjl2832| | 2020-10-30 12:39 | 只看该作者
我觉得你想法错了,很简单,主程序初始化各参数后,直接进入待机,因为待机模式下唤醒后,会执行进入待机的下一条指令,所以把发送数据放在待机后,把这两个直接放在while里一直跑就行了。

使用特权

评论回复
地板
香水城| | 2020-10-30 17:36 | 只看该作者
对于STM32F0芯片,

那个SBF 会被上下电复位清零【PORPDR,退出standby mode];

WBF会被系统复位清零,系统复位包括上下电复位。

你稍微整理确认下。

使用特权

评论回复
5
发的非官方的| | 2020-10-31 19:29 | 只看该作者
是被清零了 是吧?

使用特权

评论回复
6
发的非官方的| | 2020-10-31 19:31 | 只看该作者
复位了

使用特权

评论回复
7
发的非官方的| | 2020-10-31 19:42 | 只看该作者

使用特权

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

本版积分规则

20

主题

504

帖子

2

粉丝