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

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

[复制链接]
STMCU小助手 发布时间:2022-5-24 11:10
1、硬件准备
+ F( Q7 ^* L% [+ D& Q(1)所需硬件
* @: H1 s0 x( \9 D$ s
- \4 O0 [9 }6 |2 n% g. ?芯片:STM8L152K4T62 e% g+ X1 M7 ]  m5 r
供电:3.3V直流电源
( U4 \1 M( @( [  c7 K/ E% o. f; c7 E(2)硬件连接:8 n' `1 u% g' Y) ^2 g4 m
6 H& j1 S4 C1 I& X8 Y6 c" e
PD5 —— LED灯(验证)+ U7 v! E; k& w- Q% d# q  A' D3 {
& Y. T/ c% X, j; G4 @( z0 o
2、STM8的低功耗模式:+ l2 Q' d4 |+ e% R6 {7 p
Active-Halt Mode
8 E$ i& Z" W* I2 R) Q6 T  在此模式下, 除了 RTC 外,CPU 和其他外设的时钟被停止。 系统唤醒是通过RTC 中断、外部中断或复位。; A' Z1 O1 D. `) D. L1 S% u- b

* `$ y1 r- k! R3、工程代码:
2 C. d5 x) G1 q% {+ a1.1 所用工具:
2 ]* i& }: P9 }" s, q3 m: I

, f/ K  g- F  J5 n1 j  x  W; kIDE:IAR软件
) h9 h3 q. G- S( m# B2 t. ]" `( R7 w
1.2 知识概括:5 I; o/ m; _' L8 A% c5 i& s/ j+ |

' T) {6 J# A# f& zIAR软件程序编写
8 a8 {; K3 y1 u& i" @  U5 o  r5 |
2 ?8 R, x; t, X0 `% g1.3 现象# [4 n( n  v1 o
, \- C& I. c0 J, y% F
LED灯一秒闪烁一次,一秒钟进入低功耗模式(熄灭LED灯),一秒钟进入正常工作模式(点亮LED灯)1 R, m1 g1 g9 X) v' P* G' G

" B3 J  A3 l0 o9 I# H! D# v( A% Z. F1.4 代码
  L# B2 i) Q. ]1 ]% p

' W2 w& K- h- q3 X(1)主函数:
! @, Q% `: L6 }# i/ h* hmain.c9 R/ k( f6 K' y. _3 Q9 C

* x8 g, U; @9 @/ o8 m' \
  1. #include "stm8l15x.h"
    4 I; k4 h/ k: U: l) V- `

  2. - x7 g7 i' _3 e; Q8 B7 n5 L/ |
  3. /*******************************************************************************
    & f  p! Y5 x- {' v$ r* {: I
  4. **函数名称:void delay(unsigned int ms)     Name: void delay(unsigned int ms)1 }( A% B5 d4 h, X( w
  5. **功能描述:大概延时# }) {; l' o  |6 ^. Z5 E9 T1 @
  6. **入口参数:unsigned int ms   输入大概延时数值
    ; ~8 R' ?8 g& {
  7. **输出:无
    * F1 @! a3 t3 h2 ^5 a1 A5 Z) j! L# C
  8. *******************************************************************************/" w2 U" ~2 `# w/ q5 V+ N, B( Z5 t
  9. void delay(unsigned int ms)6 _8 C0 \8 U4 M8 d5 i- B
  10. {
    ! n- N( J5 S0 d3 {6 K: D
  11.   unsigned int x , y;
    ) \3 k! ~) T3 W0 s. I8 R
  12.   for(x = ms; x > 0; x--)
    " q2 ^3 Q: S; n
  13.     for(y = 1000 ; y > 0 ; y--);0 l2 s3 u  j" p0 _* ^' Z
  14. }
    % @+ S9 d' {2 A2 U
  15. . o# t9 D5 l  j+ y4 Q
  16. /*******************************************************************************5 Q7 f5 Y  {, F! D8 c# L
  17. **函数名称:void ALL_GPIO_Init()0 P8 u4 D  U: X0 C+ c' t
  18. **功能描述:把所有IO配置成最低功耗模式,即输出低电平,IO的功耗最低/ n& g6 y' ~$ k& D
  19. **入口参数:无
    / O# I3 K7 f( i- F6 [
  20. **输出:无0 p* `% M! k) o; ~! m
  21. *******************************************************************************/( m: _% h; h; ^7 a, k5 g1 Y
  22. void ALL_GPIO_Init()
    1 X% d# ~2 \( g
  23. {
    + O7 o  o4 \" b% I0 p5 b
  24.      // 所有IO输出低电平1 S: x7 N- x8 R" }3 b) v9 c, r; U
  25.     GPIO_Init(GPIOA,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);& N+ n6 c' |) v8 |4 o
  26.     GPIO_Init(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);8 h  C/ a* Z% a, l; ~. |
  27.     GPIO_Init(GPIOC,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);8 o% b7 J2 |- C0 D* V: U
  28.     GPIO_Init(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow);
    $ D: f% p2 R. w$ X% G: u
  29. }' [' A) c& e7 M: m" D

  30. % f6 @5 q. _0 i# V; F! x
  31. void RTC_Config(void)
      O/ R6 U+ C5 i, x# d
  32. {
    ( ]" @# m/ F# K8 }$ R/ w3 X4 P

  33. 2 r6 b$ k1 @. b/ z8 _( [
  34. ' Y. p' |" f, z' m7 T
  35.   CLK_LSICmd(ENABLE);// 使能LSI; }& }0 I; N6 o0 ~3 _

  36. 5 L, C' |2 `8 V4 A3 x
  37.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);// RTC时钟源LSI,1分频=38K* J  I; M0 s! F; P5 z' S1 o9 |  W+ k
  38. ) U3 F$ k( ?% J7 h# n5 w$ K$ A( S
  39.   while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);// 等待LSI就绪& Q. p( y' `) g) [( G

  40. 2 y9 h2 ]3 s2 a" a
  41.   RTC_WakeUpCmd(DISABLE);' C9 h( O& S; B- t4 Z- ^

  42. 4 m- m$ I- ]( S! I
  43.   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);// RTC时钟' a3 r4 g7 O- M5 c/ O

  44. ; t# i0 H& p  K; v  e1 K' {
  45.   RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);// 38K/16=2.375k=0.421ms0 K8 O7 v4 |/ K6 x

  46. / o2 Y- [' ]+ g; o2 {, j$ q) z, `1 {" }
  47.   RTC_ITConfig(RTC_IT_WUT, ENABLE);// 开启中断" ~5 O* e# l6 i$ _9 [" X3 y' k
  48. 5 B9 r$ F% G! l1 W- B7 z: e% V% @
  49.   RTC_SetWakeUpCounter(2375*2);// 2375*0.421=1S左右
    $ R* j) V" C# T, J  f# r! n/ q
  50.   //ITC_SetSoftwarePriority(RTC_CSSLSE_IRQn, ITC_PriorityLevel_3);// 优先级
    5 j: q, E/ C3 W  x! L: f6 J! q% a9 [
  51. / z7 W4 L% k, c) u7 U/ Y
  52.   enableInterrupts();
    ; m; r2 S+ N( x8 ]9 c' q
  53. 3 n, ?6 Z4 P8 `9 ?* s4 x  [
  54. }
    . ~' Y  |. s8 a0 m0 V( w2 o
  55. 4 A' t; R# ^0 E$ k7 Y3 W* J* r
  56. int main(void)  i9 ~" F6 V) U% B2 f( I+ v! Z8 n
  57. {
    2 p) L- p2 F- V8 V
  58.    disableInterrupts();             // 关总中断; h4 g% B" Z5 c8 s
  59.    PWR_FastWakeUpCmd(ENABLE);       // 设置快递呼醒0 v3 B/ G$ s- @' a3 \
  60.    RTC_Config();+ v  T4 X& e- m2 X( T
  61.    ALL_GPIO_Init();
    5 F: D( i0 Z$ K$ ], h8 ^
  62.    GPIO_Init(GPIOD,GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Slow);      // 初始化LED,设置PD_5为快速输出模式& ^& ~" ~; ^6 a; Z, L5 G# R
  63.    enableInterrupts();              // 打开系统总中断! a  k. J5 V. m$ G3 |
  64.    PWR_UltraLowPowerCmd(ENABLE);    // 超低功耗   4 X9 U* y+ w7 E6 I# z

  65. 9 L$ ]& {* A' j1 B" y: }' J9 X
  66.    while(1)                        // 进入死循环等待外部中断线号4,呼醒低功耗
    3 O5 \9 l& B) t- U- D
  67.    {
    . E, a4 F% Z0 |
  68.      RTC_ITConfig(RTC_IT_WUT, ENABLE);// 唤醒定时器中断使能  v1 c/ P! G& g% L+ V9 ?% f
  69.      RTC_WakeUpCmd(ENABLE);           // RTC唤醒使能
    6 Z& \/ F! l* a. v- z/ H
  70.      halt();  // 等待外部中断线号4,呼醒低功耗- {- t* z6 L6 K1 H% J  W: ]
  71.      RTC_WakeUpCmd(DISABLE);
    5 E6 _' m) r- @* L- X8 w, q  K
  72.    }, S# l/ s9 V" X2 y4 J7 a$ m/ J
  73. }
复制代码

+ q) f  `' d# A2 G! o$ Y1 z, X; \$ d) ?. q5 U2 \
(2)在stm8l15x_it.c加上:
  1. INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler,4)
    " U& F; l# ~8 j" L
  2. {
    & p6 r& V1 j$ E3 Q( Q
  3.     /* In order to detect unexpected events during development,
    ( `! p- P. i% y; ]- F
  4.        it is recommended to set a breakpoint on the following instruction.
    ! Q: D7 j6 q1 G+ L$ n* l
  5.     */
    5 z& R" Z; S* G- s' G
  6.      RTC_ClearITPendingBit(RTC_IT_WUT);      ' j: ~1 q( q  W: G6 I7 @
  7.      GPIO_ToggleBits(GPIOD,GPIO_Pin_5);   , \. h9 c' y& @1 N1 u0 E
  8. }
复制代码

! L6 y, F  v  B, O) J(3)现象展示. B( D) C1 p) |; D

) {. a" K9 b1 l  实测Active-halt睡眠模式 时为1.0uA% S) J; W/ X1 F

- g, c& |! `* m' \ X}[B)SVQB{EU8L8L)ZF]9GD.png * I' }7 r. j6 Y( M% I

. w# ~8 D. n0 x- Z! S图1 Active-Halt模式 1uA. t) M) Q# L; Q) h2 i
7 V' f4 N! U) G% Z2 [, I1 ?$ M
`G`VR[I`HHYPLCAW0]`4MPG.png
/ b1 h! i, s: ~0 `2 X. V- O7 e/ y3 n$ y4 p/ e+ i- h3 P8 C
图2 正常工作模式
% T9 Z& Q, B8 G- q, o
' K/ L# O  q# k0 V3 K; ]1 f
3 s9 m5 ^# o, t1 U, F/ `! R2 P4、总结
& p. U; ]) A  l! b0 U  w6 C
  以上就STM8L Active-Halt模式下的低功耗测试。
0 a2 c6 {9 f: P6 g
' }' n: D1 _2 I7 Q3 ]0 `
- |8 M0 R, ?3 x0 \" Z
赞 收藏 评论0 发布时间:2022-5-24 11:10

举报

0个回答

所属标签

相似技术帖

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