你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030F4P6待机模式唤醒应用问题

[复制链接]
hello_bug 提问时间:2020-5-26 13:55 /
使用STM32F030F4P6芯片做了一个传感器,使用LORA无线方式将传感器采集的数据发送出去。考虑到功耗,使用了Standby待机模式。
现在是可以进入待机模式,使用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_CLEAR_FLAG(PWR_FLAG_WU);
  }
  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
  HAL_PWR_EnterSTANDBYMode();
  while (1)
  {
               
               
  }
}

图片中红框部分,我看字面翻译就是说这2个标志位,一个是用来说明曾进入待机模式;另一个是曾被唤醒过,通过判断这个,认为设备进入过待机模式,那么就可以发送数据;若没进入过,那就先进入待机,不发数据。

待机唤醒问题.png
收藏 评论3 发布时间:2020-5-26 13:55

举报

3个回答
大陶 回答时间:2020-5-27 09:08:40
待机模式唤醒后不是相当于复位了吗?
hello_bug 回答时间:2020-5-27 14:36:15
dataozi 发表于 2020-5-27 09:08
待机模式唤醒后不是相当于复位了吗?

SBF由硬件置位,复位需要上电、掉电、或者由软件写CSBF标志位才能清掉;待机模式唤醒这种清不掉的吧。
WUF也是由硬件置位,能被system reset清掉,但这个sysytem reset应该是指复位引脚NRST复位清掉吧
大陶 回答时间:2020-5-27 15:43:01
hello_bug 发表于 2020-5-27 14:36
SBF由硬件置位,复位需要上电、掉电、或者由软件写CSBF标志位才能清掉;待机模式唤醒这种清不掉的吧。
WU ...

没有用过F0的待机唤醒 F1和F4的待机唤醒后 相当于复位 我看看F0的手册
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版