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

stm32f030f4p6待机唤醒应用问题

[复制链接]
hello_bug 发布时间:2020-5-27 16:40
使用STM32F030F4P6芯片做了一个传感器,使用LORA无线方式将传感器采集的数据发送出去。考虑到功耗,使用了Standby待机模式。
5 }! S+ g; V" b) \+ J现在是可以进入待机模式,使用RTC唤醒,数据也能发送出来。) C9 J7 k& t! S; s
现在想让整个传感器初始上电后先进入休眠,然后在RTC唤醒后,再发送数据;但是现在只要上电就直接发送数据,然后才进入休眠。
0 t/ V5 ?1 E( q8 `通过查看PWR->CSR寄存器,看到RM手册中说SBF和WUF位是可以用来判断是否从待机模式中醒来的,但是程序这么做了不起作用,还是上电就发送数据。
' o$ ]0 \* E* U6 k6 n请各位大佬给看看可能因为什么导致的。; c9 U' G$ G* T, A) F
int main(void)
& u( R+ E( A0 Z6 E$ l( [# o" M{' w7 _1 i+ [+ _: p  d
  /* MCU Configuration--------------------------------------------------------*/
  [  v- R6 `8 l5 N" R9 f* M; t, R3 G& a
        HAL_Init();1 R- n& i# `3 u; v7 N; O
4 w. B' P( k, ^0 l1 O2 }

! z9 \6 b+ h7 s# n  /* Configure the system clock */
$ s9 E/ A/ d. Q! }! C$ {1 S# s. e' f% T$ R* B' m
  SystemClock_Config();0 ^3 p, ~5 `; H) R
        
8 z- f) B* ?. H  MX_GPIO_Init(); / M) E8 A) x- M# \
; @4 Y- z6 s7 u+ g
  MX_RTC_Init();
( r/ y' A' a9 l$ n9 X        9 H& d) R* {! Q
  RTC_AlarmConfig();
3 V5 P- m- R1 X: V; R1 l  /* USER CODE BEGIN SysInit */9 o1 m/ B" K/ Q- y# p
& ?( p, T  D4 B& b8 E& N4 U+ ?
  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET )        //在此判断SBF标志位,若为1,则表明是被唤醒过- o% s' O" I+ K7 a! T8 r. W1 U
  //if(__HAL_PWR_GET_FLAG(PWR_FLAG_WU)!= RESET)$ W) k/ Q& ?4 V
{
# x) a) o. I. D/ n" A5 Y0 W        __HAL_RCC_GPIOA_CLK_ENABLE();
7 K" E8 X# J1 {' g! B        MX_SPI1_Init();
/ t; `0 k' c7 G! j5 @& f8 v        Lora_init();
) r+ H0 _8 y: i+ H6 a        //HAL_Delay(10000);
, `+ w* H0 k, d' }" p" H        Read_Ds18b20();
; N2 W0 ~! y2 _* c        Lora_SendTemp1();6 ]3 R/ c% ]' G" _. k, N8 P
  }+ H, j5 U+ O/ ?$ O
  __HAL_RCC_PWR_CLK_ENABLE();
/ U( v% z: x" J! ^% j# ^% u1 i1 p, m  [0 W
  if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
; @( C* p& |4 T+ x) |. {, m{
; O+ D  R, w; k3 [; p    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
+ h# Y( b  c* [  P* F1 e. G: R  }9 d8 @, L  ~) r5 z" n
        * s# u( s  l& f- K# |
  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
5 c( U0 D, ^' S( A. C
) p) D, |$ u1 xif (__HAL_PWR_GET_FLAG(PWR_FLAG_WU) != RESET)
2 p" O( t6 M8 I/ X! j2 v{  K1 |9 _4 H; O+ {
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);$ o9 \8 F) ]# X" U& C  Y
  }
) [* X& n* b. F4 d0 l9 F0 _  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
2 ?" p% t8 ?! p1 r5 s( G- l$ X& \  HAL_PWR_EnterSTANDBYMode();. W* ?( y5 B+ a. f2 P8 g
  while (1)
+ s+ O# E& G9 x/ A  p  {
( H4 o4 `% G; r               
- L& ^3 C4 k) j2 }" h; x5 `                9 S  a& m! x8 E! j
  }
  N) a; H! U/ a6 D! V7 n5 O2 j1 [}
6 v) Z" U: b. O" k* l0 C+ G0 l& I" {1 v4 f% o" X3 [
图片中红框部分,我看字面翻译就是说这2个标志位,一个是用来说明曾进入待机模式;另一个是曾被唤醒过,通过判断这个,认为设备进入过待机模式,那么就可以发送数据;若没进入过,那就先进入待机,不发数据。) o) V" G3 v; F  E" t
: @9 \; s9 M# L7 U* H1 C0 R2 \. X6 O
待机唤醒问题.png (165.34 KB, 下载次数: 0)

+ c# [/ L1 m9 N; O! v) @6 r# e- x# g% M' Q; j
  h. p, T% d( D9 f: O3 A4 M) T( [' ^3 z
1 b5 y& j/ j8 {/ q9 V8 s3 x6 E
赞 收藏 评论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:46
. j! R: b6 w9 z# {( s那就换一个思路,检测一下是不是上电复位,有一个复位源标志的,如果检测到是上电复位,就执行第一次上电的 ...

* t6 D* d' t# z  n0 W按照这个思路,我判断if(__HAL_RCC_GET_FLAG(RCC_CSR_LPWRRSTF_BitNumber) == SET),这个标志位会表明是否从低功耗模式复位唤醒的,还是没起作用。难道还有什么寄存器要设置?
疯de_恒 回答时间:2020-5-28 09:16:45
hello_bug 发表于 2020-5-27 22:019 [! w- h9 Y/ a! B
按照这个思路,我判断if(__HAL_RCC_GET_FLAG(RCC_CSR_LPWRRSTF_BitNumber) == SET),这个标志位会表明是 ...

: X1 Q" n  f: J0 E我觉得可以直接检测上电复位这个标记。

所属标签

相似技术帖

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