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

【实战经验】LPUART唤醒STOP MODE下的MCU

[复制链接]
zero99 发布时间:2017-4-1 15:06
LPUART 唤醒STOP MODE 下的MCU
3 @1 ^4 i& f; n! n' h
6 e# O" ~' E: f3 ?
前言; f, Y. y4 B, N" e. S& p
      在很多低功耗应用中都需将MCU 进入STOP MODE 以节省更多的功耗,但是在以前的架构中,如果要达到这种应用,只能在进入低功耗模式之前将串口的管脚设置成普通的GPIO 的中断模式,虽然也可- D( u; R  g  Z: M
以达到效果,但是这样会丢失第一个字节.所以我们现在可以使用新的LPUART,这样不仅可以把MCU 从STOP mode 下,还可以不丢失第一个数据,但是还是有一定限制和使用方法的.下面我们将详细介绍一下。
& [9 k; b0 L6 g' G6 T0 S3 a) ~& U; U6 v1 ^5 ~+ c" ~4 p

7 W, }. u, M' @, \1.使用不同时钟下LPUART 的方法
) q: ?. X; r) e# p1 F1 z2 N9 A
' M6 z% I4 O8 D
7 Q; X" D9 P# p
) t/ [! T. G" R' K1 }4 F
1.1 使用LSE 的LPUART
9 Z' q6 }$ w* z# F7 }5 \      首先我们先介绍一下使用LSE 下的LPUART,这个相对简单了,因为LSE 只有32.768Khz,LPUART 的波特率最大也只能到9600,速度下来了,自然就没有那么多问题了.
$ H. c6 T2 p! R5 j  d/ c7 A* ~2 o4 Y* f. I; m- T: g' n
+ b3 v* }+ H( \2 N2 a
1.2 使用HSI16 的LPUART
0 ^$ H0 P8 s6 r     在使用HSI16 作为LPUART 的时钟,这样波特率就可以上升很多,这样就会产生一个限制问题,高速的波特率与LPUART 的唤醒时间差的问题.我们以STM32L431 作为例子,他的LPUART 唤醒时间如
  ?5 h6 V! |! Q4 ?% i2 e. D; i  k下 :
  \6 ]* J, x; L: B" h9 g6 E     以下我们以某客户作为例子,他们反映,LPUART 在576000 时唤醒会丢失字节.我们来详细分析一下这些情况.6 Q+ C2 t0 R# [! @
3.PNG.thumb.jpg
( o- F( u- W6 z如果应用是在STOP MODE 1/2 下,则需要等待8.5uS,但是实际上,串口通信是异步的,并不会等等待,不想IIC 有始终延展功能.这时候我们需要做的就是在这样情况下,串口的最大波特率.
( x8 R5 |5 m+ M, ?! H2 N; r2 [      首先我们需要需要以下两个参数 :
  M5 {1 F- P% M( O" o& FtWULPUART (wakeup time from Stop mode),这个可以从数据手册上查询.(如上表)& \- ]9 {3 B- M" q& S
LPUART 接收的允许公差(如下表)
+ x+ ~: C/ w% i& D# w- p6 E+ E4 ]  k' G" n5 B# M: Z7 Q

# b6 }4 `& R% w1 j. O9 N& K, w下面我们以8bit ,1STOP,BRR ≥4096,STOP2 mode作为例子:) D# o* \: v9 y/ s1 J5 n/ {- G) c
      首先我们可以通过上表”Table 165: Tolerance of the LPUART receiver when BRR[3:0] is different from 0000”得出LPUART在这情况下的接收容差是4.42%.& r( b) m" D/ C$ C1 p  u5 u
      容错公式为 : DTRA + DQUANT + DREC + DTCL + DWU < USART0 J. |( Q2 t* d$ x- k
                DTRA: 预期发送的容错率(这个包含发射器本身振荡器的偏差)8 V& J+ N8 H9 w" L$ i5 A( H
                DQUANT: 波特率接收的错误率7 N8 V2 F% U& y* J! S
             DREC: 接收晶体的偏差/ R- i: X1 L: t" |* x7 ^9 O/ l
             DTCL: 发送的偏差率 (一般都是发送器采用不对称的上升沿和下降沿时序)
5 D1 E" t+ J. E  I2 R% W/ `/ L                DWU :是从stop mode 下唤醒后采样点的偏差而导致的错码率.7 Y) @+ [5 M; R' O5 e& R
      为了更容易计算,我们简化一下公式,假设DTRA,DQUANT,DREC和DTCL为0%,所以DWU是4.42%,为了更准确,我还要考虑晶体的误差,我们使用的HIS误差是1%, tWULPUART = 8.5uS(这里采用的是STOP2):
) i. h1 J) P0 m/ y# ?+ p% s& d                DREC + DWU < LPUART3 O! C7 u8 P& H) Y0 ]& ~0 |9 f
                =>1% + DWU <4.42%/ r3 s  m' ]3 j+ `7 @
                =>DWU<3.42%
: h+ X2 g5 o/ k9 C# j+ Y* l  o               因为我们这里采用的是8bit ,1stop,所以 :
$ Q( d( u1 n  v/ e( @2 W1 D               M[1:0] = 00 :
' {4 C) L  i2 S; V5 p& }               DWU = tWUUSART/(10 × Tbit )
9 o7 p) H4 R; h6 z0 z2 \7 R3 U, b               Tbit min = 8.5us/( 10* 3.42%)
3 k4 |2 N5 U8 D( a% S; C* X% Y               Tbit min = 24.8us# l+ G8 Y/ N% n4 M" w6 G
      所以在这个条件下最大的波特率是1/24.8us,即要小于40.3K的波特率.我们客户使用的是576000的波特率显然会丢失第一个字节,当修改为19200后,问题就解决了.

1 w) g: o, N6 l6 D
; ]1 [1 m8 B% T% c! U8 F/ }7 d" ?1 S- J9 c
' x% l! N7 ~: X# d5 I6 ]* s4 y7 ]% i
LPUART唤醒STOP MODE下的MCU.pdf (244.76 KB, 下载次数: 389)
赞 收藏 5 评论7 发布时间:2017-4-1 15:06

举报

7个回答
sssh 回答时间:2017-4-24 10:49:16
你好,这个唤醒的实现,有代码吗?
ataudio 回答时间:2017-6-16 08:00:33
论坛里的风子有实现样例的。用的是L476.
jangyouhua 回答时间:2018-5-16 15:53:49
w分析得不错0 ~2 ]1 h0 z) S' q9 C
man9953212 回答时间:2020-4-29 20:30:20
分析得不错
zzz80675@sohu.c 回答时间:2020-12-24 11:50:11
正在使用,学习了,感谢
dfr3602 回答时间:2020-12-24 12:43:44
你好,对应Stop 模式的功耗是多少?
lijinqiu 回答时间:2021-1-15 15:30:24
谢谢分享!

所属标签

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