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

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

[复制链接]
zero99 发布时间:2017-4-1 15:06
LPUART 唤醒STOP MODE 下的MCU( _6 ~+ Y% Q4 H. Y) H' J& a
8 m7 D1 a* p+ A- V$ s
前言6 i0 V2 X* `- c* v1 f  B4 h, K$ O
      在很多低功耗应用中都需将MCU 进入STOP MODE 以节省更多的功耗,但是在以前的架构中,如果要达到这种应用,只能在进入低功耗模式之前将串口的管脚设置成普通的GPIO 的中断模式,虽然也可
9 n$ F8 e+ E6 s/ s9 {以达到效果,但是这样会丢失第一个字节.所以我们现在可以使用新的LPUART,这样不仅可以把MCU 从STOP mode 下,还可以不丢失第一个数据,但是还是有一定限制和使用方法的.下面我们将详细介绍一下。
, C: L2 o* T  v3 O( E+ q3 R8 B( o& r: L9 o0 T

0 E  w4 P( N( m- \* ~8 P' ]1.使用不同时钟下LPUART 的方法
8 o/ Z2 V8 e& A5 @7 E
! N4 y$ q  \3 w# y" v* P3 |" F4 }0 J

: j2 D; Y. K0 \2 P) M( Z- ]1.1 使用LSE 的LPUART
) i* c$ o; @; z( b      首先我们先介绍一下使用LSE 下的LPUART,这个相对简单了,因为LSE 只有32.768Khz,LPUART 的波特率最大也只能到9600,速度下来了,自然就没有那么多问题了.
# M0 p4 ^+ v2 L' z+ A& h- P
; N7 d% e% d& G( W
! e7 ?, m( X6 I* f- _5 c% S1.2 使用HSI16 的LPUART
7 e; h8 @% N3 u  u( X2 t     在使用HSI16 作为LPUART 的时钟,这样波特率就可以上升很多,这样就会产生一个限制问题,高速的波特率与LPUART 的唤醒时间差的问题.我们以STM32L431 作为例子,他的LPUART 唤醒时间如3 Z3 T% i5 @4 J. j9 E
下 :
5 _+ l9 s' l  o) F: w     以下我们以某客户作为例子,他们反映,LPUART 在576000 时唤醒会丢失字节.我们来详细分析一下这些情况.
( V& }1 b; h7 `  i( j
3.PNG.thumb.jpg
( n0 U5 W% @2 h6 c+ U" H, k% G/ A如果应用是在STOP MODE 1/2 下,则需要等待8.5uS,但是实际上,串口通信是异步的,并不会等等待,不想IIC 有始终延展功能.这时候我们需要做的就是在这样情况下,串口的最大波特率.
5 V9 h' p  h) R. `& A  S% t* q      首先我们需要需要以下两个参数 :$ W) C: h7 n3 F
tWULPUART (wakeup time from Stop mode),这个可以从数据手册上查询.(如上表)8 B7 @9 x+ }/ U4 d- Y. ]+ |1 `8 l
LPUART 接收的允许公差(如下表)
+ f3 m) ~% w2 k( [5 s. O) w/ W$ d) C/ `; C3 M& D. w
/ j2 b" ?3 e  n4 p6 m
下面我们以8bit ,1STOP,BRR ≥4096,STOP2 mode作为例子:+ d5 \! X/ a6 D: w
      首先我们可以通过上表”Table 165: Tolerance of the LPUART receiver when BRR[3:0] is different from 0000”得出LPUART在这情况下的接收容差是4.42%.
: e* d6 ?' N, k% D( P      容错公式为 : DTRA + DQUANT + DREC + DTCL + DWU < USART
* k- l3 I7 [' w( _+ R                DTRA: 预期发送的容错率(这个包含发射器本身振荡器的偏差)
$ U1 }! A, `2 Q3 h                DQUANT: 波特率接收的错误率
# @8 s$ l: z- ~             DREC: 接收晶体的偏差7 W# w" S% v7 R6 H% A
             DTCL: 发送的偏差率 (一般都是发送器采用不对称的上升沿和下降沿时序)
: |) S0 {2 a4 a$ C: K; w3 e- {; |                DWU :是从stop mode 下唤醒后采样点的偏差而导致的错码率.$ z$ ^2 p! t( U
      为了更容易计算,我们简化一下公式,假设DTRA,DQUANT,DREC和DTCL为0%,所以DWU是4.42%,为了更准确,我还要考虑晶体的误差,我们使用的HIS误差是1%, tWULPUART = 8.5uS(这里采用的是STOP2):
' y$ _) N+ {' v3 ~( X+ B: I( h                DREC + DWU < LPUART& e8 e* ]. I* Q  f8 ?
                =>1% + DWU <4.42%
: j% Z% Y& t, Q- b6 \                =>DWU<3.42%' k. A) y: V8 X/ I+ D0 {' f+ y1 p
               因为我们这里采用的是8bit ,1stop,所以 :' ^6 c1 l3 L3 A) r& }! r( m& F
               M[1:0] = 00 :2 l% b2 E1 |( e! M; ?& F
               DWU = tWUUSART/(10 × Tbit ); M1 i. `8 [  F, u! l
               Tbit min = 8.5us/( 10* 3.42%)$ U0 d' M' T# `: x+ x9 d+ a
               Tbit min = 24.8us
; T& m$ S# ^6 N& \$ s* ?      所以在这个条件下最大的波特率是1/24.8us,即要小于40.3K的波特率.我们客户使用的是576000的波特率显然会丢失第一个字节,当修改为19200后,问题就解决了.

& M8 v# W2 c5 d5 p9 U! u$ N( Q: ^6 }. t9 ?( |

0 v4 n# ^! j4 y5 K3 t& e& ~
6 Z- t: I" ~0 v; p
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分析得不错
6 ~# q) d* M% I, {& ?+ v- z
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 手机版