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

【经验分享】STM8L Active-Halt模式下的低功耗

[复制链接]
STMCU小助手 发布时间:2022-5-24 11:10
1、硬件准备
  D0 y9 j- Q0 ?# Y(1)所需硬件
& Z' G* \6 b6 P
  x# O  f0 }& Y  f) A芯片:STM8L152K4T6
! i5 x, w  }/ w) M4 t! q, K" b  i供电:3.3V直流电源: s# ]: y5 p) b9 [( @
(2)硬件连接:
( F. X! X: F3 o  I- @6 z8 W5 n1 v7 L! w5 q
PD5 —— LED灯(验证)
; ^5 J- V; u4 W; G( g4 g# w  V0 k3 p; y+ B0 R
2、STM8的低功耗模式:+ Z5 K% ?* g3 r+ r3 y
Active-Halt Mode2 S) A5 p+ G2 b, J9 B: g9 \% G% F
  在此模式下, 除了 RTC 外,CPU 和其他外设的时钟被停止。 系统唤醒是通过RTC 中断、外部中断或复位。
1 T: p' Z2 e6 v5 {1 x& g6 h; r6 q/ [2 r5 h8 t% _
3、工程代码:
# b" P/ |2 c- `: v7 [- v2 E2 G- b1.1 所用工具:
" ]( G& B% j/ o7 V

- s3 Z3 g, e5 J1 DIDE:IAR软件% s3 M0 @- O- J' O

3 h& ~, q4 b: i- T- c4 i! I% E1.2 知识概括:, V4 q0 j7 c: U' x( k0 v  C0 l

# _. k$ a7 u9 Q$ D* U% \% S! rIAR软件程序编写
3 F4 _' h7 D; p, `1 r& m( _% _
' C5 K/ j, \: M! A1.3 现象! v6 {, w$ f8 d; e! k# T

3 W0 Q  V; T' d/ \3 SLED灯一秒闪烁一次,一秒钟进入低功耗模式(熄灭LED灯),一秒钟进入正常工作模式(点亮LED灯)
& Q5 L% M- @" {2 P( [3 `/ i4 `' n4 ]9 v
1.4 代码
  _, d% L8 [2 Y3 i; N

4 |  v2 h& q$ j5 A/ ~(1)主函数:/ c+ S/ h  Y5 c, Z+ P5 }/ z
main.c
9 T7 V4 q3 `  I' c
8 F7 N% @3 }; d8 @  t+ X4 N
  1. #include "stm8l15x.h"0 g- C! t. h7 ]! q( C, m1 c
  2. 7 _. |' F: j; l! M
  3. /*******************************************************************************( p" H: M. z( x# P1 L. j% A
  4. **函数名称:void delay(unsigned int ms)     Name: void delay(unsigned int ms)
    9 Y2 s/ h8 }! b. C8 G0 }
  5. **功能描述:大概延时" m, h3 K7 e( f2 K7 n: T
  6. **入口参数:unsigned int ms   输入大概延时数值
    / j4 k$ \0 z" v8 y! D- c4 Y
  7. **输出:无
    0 j9 ~) M# y) M- h
  8. *******************************************************************************/, Z$ j% d7 z" V0 v
  9. void delay(unsigned int ms)) P% T3 W3 B( r2 p8 [; h5 r
  10. {
    1 W$ p2 g1 d! I8 A5 R
  11.   unsigned int x , y;7 T: I3 K- r4 g9 u4 g8 W* z
  12.   for(x = ms; x > 0; x--)
    3 p5 `3 |/ d1 i
  13.     for(y = 1000 ; y > 0 ; y--);
    3 L' h/ m( P/ h; N/ h8 C+ F: T
  14. }! h+ e2 e( j! J% q" z' o- `- ~: d
  15. , F& K6 y7 Y, ^2 M& m2 i2 o/ N
  16. /*******************************************************************************5 w" V( E  r) ~# E8 T
  17. **函数名称:void ALL_GPIO_Init()
    $ A' u: A& P! k2 Y* J$ Z
  18. **功能描述:把所有IO配置成最低功耗模式,即输出低电平,IO的功耗最低! ]0 J% c, J( Z2 _/ G4 x9 _9 `
  19. **入口参数:无5 J& Y7 v! \. D# a6 I8 r! J
  20. **输出:无1 K) U. X5 i% Z4 v
  21. *******************************************************************************/
    7 h# M& U) M2 Y5 K5 b. K
  22. void ALL_GPIO_Init()
    ; C) _. U8 O% g1 o3 A- T/ x2 C1 Z
  23. {
    7 ~  Y' U. l+ d- U$ P' E
  24.      // 所有IO输出低电平- B3 r; B+ c, I9 L& _! l% O- a
  25.     GPIO_Init(GPIOA,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);3 ~5 I5 s% }. ^/ d. o5 P
  26.     GPIO_Init(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);! X* x4 n4 s* y- J" x
  27.     GPIO_Init(GPIOC,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
    7 {: x& D! T/ ^: W' J5 Y; g/ k
  28.     GPIO_Init(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);( c9 \& v/ h' C% G9 s1 e
  29. }
    3 R- Q3 U' C( E. Y

  30. . V8 N" B, g8 m5 q0 |2 l& A3 h
  31. void RTC_Config(void)& M) n+ a0 Y9 z7 v6 j7 `
  32. {
    ; d+ k" _- e, I3 W6 I* a3 B. ^
  33. ' p7 B0 |1 S( R- \% C  P
  34. - y1 C3 V. F0 t* ~1 E7 f- J! g
  35.   CLK_LSICmd(ENABLE);// 使能LSI/ y" h2 @: k, ^7 F: f- {+ x1 |

  36. " t( a: H4 t$ H/ U, w5 M
  37.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);// RTC时钟源LSI,1分频=38K% P' @# K% `& y- X1 `% a: T) ^
  38. ! E, X. Y6 K3 [6 k
  39.   while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);// 等待LSI就绪
    1 l$ O, s3 Z8 n/ `

  40. 3 q- P/ K: D6 h  ^! G
  41.   RTC_WakeUpCmd(DISABLE);
    $ z% T: L% U+ V8 R) F& Q7 p

  42. ; J+ S6 `1 i/ J& E
  43.   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);// RTC时钟
    ) ~) P1 _1 O$ U' K1 V# L

  44. # Q1 b2 {# p2 H1 F
  45.   RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);// 38K/16=2.375k=0.421ms& X' z; l, i7 o& b& a& }
  46. + k- l5 ], [: P9 O6 z
  47.   RTC_ITConfig(RTC_IT_WUT, ENABLE);// 开启中断
      j; n+ D. E6 w, k. D$ ?

  48. : J4 V" r6 Z4 C6 k7 [( M& X4 E
  49.   RTC_SetWakeUpCounter(2375*2);// 2375*0.421=1S左右
    - _7 B* D3 t5 F- {) F% C
  50.   //ITC_SetSoftwarePriority(RTC_CSSLSE_IRQn, ITC_PriorityLevel_3);// 优先级
    + q1 [4 O. w2 n6 W$ g. V

  51. ! ^/ S+ w- z3 I. ]& }5 `
  52.   enableInterrupts();
    5 a( V5 m" ]4 p/ A

  53. 6 p/ K. Y* g1 C
  54. }9 z# |3 X$ N6 n5 W$ |! f

  55. " f1 f5 w$ q2 B& _3 B% T) g# Z
  56. int main(void)
    0 v' ^' z- z7 s0 ]
  57. {
    " F  W1 b7 v+ O, ~+ d) o
  58.    disableInterrupts();             // 关总中断/ @8 m) L% V% _/ J6 [8 y
  59.    PWR_FastWakeUpCmd(ENABLE);       // 设置快递呼醒1 e5 [6 a, y9 q& L( m9 P8 h
  60.    RTC_Config();
      r0 I" j/ p+ U
  61.    ALL_GPIO_Init();
      ?0 u. E$ j6 W1 x1 Y
  62.    GPIO_Init(GPIOD,GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Slow);      // 初始化LED,设置PD_5为快速输出模式* E8 b% o# _: R) X
  63.    enableInterrupts();              // 打开系统总中断
    4 W2 Q: F/ k- \, u
  64.    PWR_UltraLowPowerCmd(ENABLE);    // 超低功耗   $ ?- x6 j# G; w2 o& B$ y7 H: L

  65. ' R+ i) t! Q  O/ \) t2 s( e
  66.    while(1)                        // 进入死循环等待外部中断线号4,呼醒低功耗/ r- G# E/ `/ a' v* h
  67.    {5 g' i+ H: ]- v
  68.      RTC_ITConfig(RTC_IT_WUT, ENABLE);// 唤醒定时器中断使能8 @, ?9 A" S; z0 k, j4 t
  69.      RTC_WakeUpCmd(ENABLE);           // RTC唤醒使能& _3 u0 K( g/ g1 u. t; h
  70.      halt();  // 等待外部中断线号4,呼醒低功耗
    8 c1 K* [2 T, ?: b! g
  71.      RTC_WakeUpCmd(DISABLE);
    % E2 D+ t" ~8 b$ g( R. i3 [. B
  72.    }
    - @3 K8 }9 D4 Q
  73. }
复制代码

4 M8 r  Z, c9 R9 k! U$ D  K5 y. B
0 p& h  r5 R$ g6 i3 N(2)在stm8l15x_it.c加上:
  1. INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler,4)
    3 E0 F* N! h  P0 v6 o# ^
  2. {
    + \2 [# ]* C+ I! i
  3.     /* In order to detect unexpected events during development,; {; ?4 n, o% A+ b% ~! n
  4.        it is recommended to set a breakpoint on the following instruction.* y" k5 l8 V7 d9 W+ G# w/ E
  5.     */
    9 f" g  V0 a' G+ F, R% g/ j7 u1 i
  6.      RTC_ClearITPendingBit(RTC_IT_WUT);      
    " V' c' i  I) V
  7.      GPIO_ToggleBits(GPIOD,GPIO_Pin_5);   
    : K% W# |) {( G  u& T
  8. }
复制代码

+ k9 ]) _; I$ ]* j  I(3)现象展示
6 R9 p, d) d9 |) b8 w: ^0 Z0 \7 W) D3 _2 \& Y6 `) u
  实测Active-halt睡眠模式 时为1.0uA
& v+ B1 Y9 a! y9 B' @# E* W
4 K' [& V8 A- M! f- n X}[B)SVQB{EU8L8L)ZF]9GD.png
! ^$ @9 \- s6 M2 M$ K: C5 c- g+ J1 \8 I( N% @
图1 Active-Halt模式 1uA4 w" _" y: T- D; w3 o' O' N  V

$ y! D( R# A% Z4 M+ R  ^- E `G`VR[I`HHYPLCAW0]`4MPG.png 7 B, ^& Q3 h! g3 V3 Z

' K! }0 C/ l. _  d. W6 b) J' H; T! T图2 正常工作模式
8 z. d3 E2 N% }  m+ ?; s9 [9 G. T& B" M6 g
1 e- @& w3 R8 Z( F# j( D
4、总结

7 i# Z1 _7 C2 H$ f9 \# ]( F  以上就STM8L Active-Halt模式下的低功耗测试。) t5 l0 d3 \5 [; \0 m: d5 k

  m* h0 S; {9 J2 J& s0 p4 G' d1 X. A! I& `6 z
- V  _( z( n0 t' O, M% w9 ~
赞 收藏 评论0 发布时间:2022-5-24 11:10

举报

0个回答

所属标签

相似技术帖

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