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

stm32f030f4p6待机唤醒应用问题

[复制链接]
hello_bug 发布时间:2020-5-27 16:40
使用STM32F030F4P6芯片做了一个传感器,使用LORA无线方式将传感器采集的数据发送出去。考虑到功耗,使用了Standby待机模式。4 b: Z$ Q: p. }0 V, o
现在是可以进入待机模式,使用RTC唤醒,数据也能发送出来。
3 t3 ]+ \4 y+ u) H1 y# r, m现在想让整个传感器初始上电后先进入休眠,然后在RTC唤醒后,再发送数据;但是现在只要上电就直接发送数据,然后才进入休眠。3 i5 E1 g2 x5 ^
通过查看PWR->CSR寄存器,看到RM手册中说SBF和WUF位是可以用来判断是否从待机模式中醒来的,但是程序这么做了不起作用,还是上电就发送数据。
% m5 A( }* e" A0 w- h+ U! h0 }5 J请各位大佬给看看可能因为什么导致的。3 R0 W" Y) A: n
int main(void)
! ^$ L- T$ m5 r1 h+ A{
- ^5 m" J* n# _9 d+ f- j  /* MCU Configuration--------------------------------------------------------*/; m2 x" ~: m3 P3 c6 o
2 V7 R2 V  b# Z) m5 l
        HAL_Init();
( M1 {: E8 l2 h) r& _3 ?5 }# y: X# ~5 z* V. n# X9 x
1 k9 U9 E8 ~7 I6 u$ a
  /* Configure the system clock */
0 D' ?6 I, w6 b7 N2 n$ E+ w3 |  S. _! r$ E" d) B" O0 _5 P) u
  SystemClock_Config();, ^. V  P9 h4 A" D; q/ N
        % j" }# [4 W. r2 ]. c1 S' h0 k  l/ s
  MX_GPIO_Init();
1 Y' }" q. T' x2 h- d- B7 w4 T3 B0 C' r1 f/ L% U
  MX_RTC_Init();
- K4 W9 s9 c1 ]6 s8 C; ~) f7 g        6 m3 v% ^* Y; x! \, R. b6 Z+ O+ R* h
  RTC_AlarmConfig();
* v* y, F1 i; N+ |; J6 j2 Q  /* USER CODE BEGIN SysInit */+ e! W0 C5 j3 W5 f% R! U) Z

5 K& l& O2 F1 ?( ^# n* g( _  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET )        //在此判断SBF标志位,若为1,则表明是被唤醒过1 E7 o( w8 I- i8 b: R' g
  //if(__HAL_PWR_GET_FLAG(PWR_FLAG_WU)!= RESET)6 z; u  J7 I2 a0 C
{
2 j6 j$ Y( E! o- |, [( ^: q/ W3 G        __HAL_RCC_GPIOA_CLK_ENABLE();
& Q. r! R: t) r* y- v: V# _        MX_SPI1_Init();; L5 f. `/ F5 Y. K4 o0 z
        Lora_init();
$ K9 K1 j5 w% l/ z, N$ l        //HAL_Delay(10000);
5 l( r+ B- I: x9 w) o4 r        Read_Ds18b20();# f* w- t  u# g5 X- T; n. }6 s( d
        Lora_SendTemp1();
) E% y9 {5 G8 w# ]+ S; t& f  }
+ t  x! Z& b) u8 h4 D2 {0 X  __HAL_RCC_PWR_CLK_ENABLE();. g& R4 G. A, y: c7 b

1 ], c/ b' x- m. G! t  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
- q- Q: I  ]5 |* g3 C{
+ V4 h. [0 L: S    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);* g3 P' n" x; A( f% E
  }
% s1 a& i8 d% r6 |        6 T# q! s) X( a0 A; X" h& a# c  k
  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
6 _7 m$ V' @7 h- W8 _
+ }" Z0 t# w+ I. r5 `: E& V# {% Lif (__HAL_PWR_GET_FLAG(PWR_FLAG_WU) != RESET)
  G' [5 T7 s! Q{
; C! y6 l, `" S6 O    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);% G; I7 e5 E- t, c$ X  k+ @2 j
  }! o3 X8 Z* M& X0 f5 i
  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
, S" R3 Q7 S) N5 k& }8 \& ?  HAL_PWR_EnterSTANDBYMode();
+ H& L4 I/ R* e  while (1)- A$ B- O; h! v: |
  {
5 i! n! R  I6 \# B2 I  x/ T$ K                  n% s( d6 H& k  D. p$ k
               
) ]( D4 `) Y3 e* u' ~  }
$ r' N2 f: U/ `* ~2 \- Y9 c}
; o3 H8 L1 j* I8 C; N: `% ]' J
! y( }. ]8 \+ I* {1 A) J图片中红框部分,我看字面翻译就是说这2个标志位,一个是用来说明曾进入待机模式;另一个是曾被唤醒过,通过判断这个,认为设备进入过待机模式,那么就可以发送数据;若没进入过,那就先进入待机,不发数据。
# `. O# f1 G6 n5 |( E) L/ m. V0 u; L7 D. p; L' _. Z7 e
待机唤醒问题.png (165.34 KB, 下载次数: 0)
5 S: }" T) H1 K! k3 {, z
% c4 n* B- m! s- H
9 W) b5 G: q4 W) _
# H1 ?2 _+ [# _2 v4 B; C  ]
赞 收藏 评论3 发布时间:2020-5-27 16:40

举报

3个回答
疯de_恒 回答时间:2020-5-27 16:46:58
那就换一个思路,检测一下是不是上电复位,有一个复位源标志的,如果检测到是上电复位,就执行第一次上电的动作,否则当是唤醒。
hello_bug 回答时间:2020-5-27 22:01:49
す疯Ⅱ恒す 发表于 2020-5-27 16:468 O. k" `, G4 s. e
那就换一个思路,检测一下是不是上电复位,有一个复位源标志的,如果检测到是上电复位,就执行第一次上电的 ...
" A1 y* k- G! f% q( F+ ~
按照这个思路,我判断if(__HAL_RCC_GET_FLAG(RCC_CSR_LPWRRSTF_BitNumber) == SET),这个标志位会表明是否从低功耗模式复位唤醒的,还是没起作用。难道还有什么寄存器要设置?
疯de_恒 回答时间:2020-5-28 09:16:45
hello_bug 发表于 2020-5-27 22:012 N. C. K1 A" A$ F
按照这个思路,我判断if(__HAL_RCC_GET_FLAG(RCC_CSR_LPWRRSTF_BitNumber) == SET),这个标志位会表明是 ...
/ ~" Q* r* I! G, P$ `3 K7 J$ Y" Y- [
我觉得可以直接检测上电复位这个标记。

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版