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

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

[复制链接]
zero99 发布时间:2017-4-1 15:06
LPUART 唤醒STOP MODE 下的MCU
* s0 n' p6 w- E8 z+ q
. m6 B7 b% M+ _
前言# i7 M- z% {4 C
      在很多低功耗应用中都需将MCU 进入STOP MODE 以节省更多的功耗,但是在以前的架构中,如果要达到这种应用,只能在进入低功耗模式之前将串口的管脚设置成普通的GPIO 的中断模式,虽然也可. V0 C$ e! K" }5 c1 f: F' S( E1 r
以达到效果,但是这样会丢失第一个字节.所以我们现在可以使用新的LPUART,这样不仅可以把MCU 从STOP mode 下,还可以不丢失第一个数据,但是还是有一定限制和使用方法的.下面我们将详细介绍一下。, @3 j; m4 e6 A8 f

6 |0 W+ F: A4 R
5 `& G( B9 l) M( M4 d6 W0 K1.使用不同时钟下LPUART 的方法7 T7 d1 B8 ]1 l* L) k+ U0 ?

; F* l5 K, L" ]4 u/ m6 D! k& s# f1 ~$ P( e  T

: G3 N( U& R6 g  g/ g# o; q1.1 使用LSE 的LPUART/ E+ l2 U) [/ L7 V! e* m% A
      首先我们先介绍一下使用LSE 下的LPUART,这个相对简单了,因为LSE 只有32.768Khz,LPUART 的波特率最大也只能到9600,速度下来了,自然就没有那么多问题了.
) E* k! }5 n+ H4 d! ]+ U' F2 U- ^" k/ m' V
6 \7 k1 v- b) u8 X- Y  V7 p% R
1.2 使用HSI16 的LPUART, I- Q4 G! q; d' P
     在使用HSI16 作为LPUART 的时钟,这样波特率就可以上升很多,这样就会产生一个限制问题,高速的波特率与LPUART 的唤醒时间差的问题.我们以STM32L431 作为例子,他的LPUART 唤醒时间如
7 D* P9 f  h( i. |9 k7 f下 :) V  d6 R) j) k6 z
     以下我们以某客户作为例子,他们反映,LPUART 在576000 时唤醒会丢失字节.我们来详细分析一下这些情况.
9 B7 j2 Z0 ?" N
3.PNG.thumb.jpg 0 X" o! `8 v, X5 ^* R
如果应用是在STOP MODE 1/2 下,则需要等待8.5uS,但是实际上,串口通信是异步的,并不会等等待,不想IIC 有始终延展功能.这时候我们需要做的就是在这样情况下,串口的最大波特率.1 N9 c, f% ^, y$ E) r5 Z
      首先我们需要需要以下两个参数 :) L, `7 e3 O% A+ R" Z( p( ~
tWULPUART (wakeup time from Stop mode),这个可以从数据手册上查询.(如上表)
; Y0 v/ j9 B) d* m0 gLPUART 接收的允许公差(如下表)
' S% S, r# @" d$ X3 v. B( @4 A
9 I/ J5 g0 N2 f, c
+ z0 Q' K) P7 g. i  d3 e下面我们以8bit ,1STOP,BRR ≥4096,STOP2 mode作为例子:) D8 |% e. N9 C2 k  b
      首先我们可以通过上表”Table 165: Tolerance of the LPUART receiver when BRR[3:0] is different from 0000”得出LPUART在这情况下的接收容差是4.42%.  C1 F( M$ d' n4 E, O8 W  N
      容错公式为 : DTRA + DQUANT + DREC + DTCL + DWU < USART
3 x9 V5 x* Q5 C: X* E                DTRA: 预期发送的容错率(这个包含发射器本身振荡器的偏差), j4 w9 |/ Q% m. _
                DQUANT: 波特率接收的错误率
3 h) A. {4 }1 f2 k* P/ C9 X- G             DREC: 接收晶体的偏差2 |4 Z) W) j7 M" `
             DTCL: 发送的偏差率 (一般都是发送器采用不对称的上升沿和下降沿时序)$ R9 n) o5 O- z' N6 L9 ]
                DWU :是从stop mode 下唤醒后采样点的偏差而导致的错码率.
: Y8 D! \" V3 ^# p      为了更容易计算,我们简化一下公式,假设DTRA,DQUANT,DREC和DTCL为0%,所以DWU是4.42%,为了更准确,我还要考虑晶体的误差,我们使用的HIS误差是1%, tWULPUART = 8.5uS(这里采用的是STOP2):8 w: {, Z3 P/ @8 t
                DREC + DWU < LPUART4 m: H3 i4 n- i( o/ S
                =>1% + DWU <4.42%+ r6 B! A- G! a0 u1 |: X( o& u
                =>DWU<3.42%
0 |( M! `/ F! g7 P) w               因为我们这里采用的是8bit ,1stop,所以 :
7 _7 S% _2 R5 h4 `$ f8 ^               M[1:0] = 00 :
+ b, w; j: G' J, H; i               DWU = tWUUSART/(10 × Tbit )
! Z$ `, `# H5 g8 L4 G0 ~               Tbit min = 8.5us/( 10* 3.42%)  N/ z& j) `7 q* u  y  D- K2 h
               Tbit min = 24.8us
( `' v/ J4 Z1 Z: Z1 H1 Q7 B/ ], N      所以在这个条件下最大的波特率是1/24.8us,即要小于40.3K的波特率.我们客户使用的是576000的波特率显然会丢失第一个字节,当修改为19200后,问题就解决了.

* S0 r! @7 I  c* Q& M5 t  Y% l& h! [2 c8 d) x. Y

' `9 l5 c, b& ^+ K2 k

! R3 ~2 _, o4 f" \2 P, b/ t LPUART唤醒STOP MODE下的MCU.pdf (244.76 KB, 下载次数: 376)
收藏 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分析得不错& b; y2 k* H! R, F. s' p/ C# J* ^
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版