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

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

[复制链接]
zero99 发布时间:2017-4-1 15:06
LPUART 唤醒STOP MODE 下的MCU
. a9 W3 C1 W* g/ w, p; e7 E" B/ q

, C+ k* d. ]* z' Q  {& b: t( B1 M前言/ w8 x2 p1 o" L. d6 e0 U; D* d
      在很多低功耗应用中都需将MCU 进入STOP MODE 以节省更多的功耗,但是在以前的架构中,如果要达到这种应用,只能在进入低功耗模式之前将串口的管脚设置成普通的GPIO 的中断模式,虽然也可' {8 ?6 }' v* Y/ I" M: x
以达到效果,但是这样会丢失第一个字节.所以我们现在可以使用新的LPUART,这样不仅可以把MCU 从STOP mode 下,还可以不丢失第一个数据,但是还是有一定限制和使用方法的.下面我们将详细介绍一下。) q  h( A- \" p; [2 c, F" |
* ?9 F" q, |3 z8 W* d6 P4 O

& l$ a0 t8 [4 c3 b7 R+ N# I3 C1.使用不同时钟下LPUART 的方法! h( E* g* @) X- B1 P- C
1 \) Y6 P0 S+ k# e1 @: L7 `' q1 _5 Y

; s; ?" {" q, D

) @: P9 q2 h* b1.1 使用LSE 的LPUART' K# \2 _, \9 W  M$ U, K
      首先我们先介绍一下使用LSE 下的LPUART,这个相对简单了,因为LSE 只有32.768Khz,LPUART 的波特率最大也只能到9600,速度下来了,自然就没有那么多问题了.! L; \$ v$ ?8 w" ~0 Y7 ?$ }$ S/ @

! W3 v7 c4 K' T* x- i: Z! ^% k+ _7 z: V$ a" ~
1.2 使用HSI16 的LPUART/ i7 Q9 x% o: u8 t+ z6 h! b
     在使用HSI16 作为LPUART 的时钟,这样波特率就可以上升很多,这样就会产生一个限制问题,高速的波特率与LPUART 的唤醒时间差的问题.我们以STM32L431 作为例子,他的LPUART 唤醒时间如
3 {0 }: u6 R# {7 ?3 b下 :
2 Q; i( J0 H$ J$ f, G     以下我们以某客户作为例子,他们反映,LPUART 在576000 时唤醒会丢失字节.我们来详细分析一下这些情况." z9 G$ ~3 w4 x  r
3.PNG.thumb.jpg - x" h- p# k1 `; X6 v/ ]7 {
如果应用是在STOP MODE 1/2 下,则需要等待8.5uS,但是实际上,串口通信是异步的,并不会等等待,不想IIC 有始终延展功能.这时候我们需要做的就是在这样情况下,串口的最大波特率.
6 `( U: M8 u# q8 H) K. s, ]      首先我们需要需要以下两个参数 :
: [, U) Z0 E' E+ C7 f: \) r+ AtWULPUART (wakeup time from Stop mode),这个可以从数据手册上查询.(如上表)
, _7 K3 z( C, Z$ W( D% aLPUART 接收的允许公差(如下表)
5 p# l0 Z$ R6 N+ k* ]& w
$ N$ r  F- @( L8 H5 ~3 F
2 B" b, _7 |5 C0 x下面我们以8bit ,1STOP,BRR ≥4096,STOP2 mode作为例子:% N! Q4 W6 E- z; m+ R
      首先我们可以通过上表”Table 165: Tolerance of the LPUART receiver when BRR[3:0] is different from 0000”得出LPUART在这情况下的接收容差是4.42%.  T" T4 `: T  |! c% e/ g( s5 ^
      容错公式为 : DTRA + DQUANT + DREC + DTCL + DWU < USART
" F" b6 d4 e  t$ Y: Z) V                DTRA: 预期发送的容错率(这个包含发射器本身振荡器的偏差); q' a( B/ v4 x1 p8 ?- |  H" g
                DQUANT: 波特率接收的错误率1 M9 _# j8 m& Y( V' H- n+ U
             DREC: 接收晶体的偏差2 `6 I. U: W9 T0 G- t
             DTCL: 发送的偏差率 (一般都是发送器采用不对称的上升沿和下降沿时序)5 A3 ]+ [  Y9 ^3 V+ w) q5 Z! L
                DWU :是从stop mode 下唤醒后采样点的偏差而导致的错码率.$ H* O: X& c* H2 R( A$ D7 W
      为了更容易计算,我们简化一下公式,假设DTRA,DQUANT,DREC和DTCL为0%,所以DWU是4.42%,为了更准确,我还要考虑晶体的误差,我们使用的HIS误差是1%, tWULPUART = 8.5uS(这里采用的是STOP2):% T& s4 A$ z& B$ L  Y# M: z
                DREC + DWU < LPUART
- {% b. x5 E1 X3 m, k' j                =>1% + DWU <4.42%8 |' R& b- R, z1 L% `
                =>DWU<3.42%
0 E% j. w$ z) m               因为我们这里采用的是8bit ,1stop,所以 :. W* S/ {  T" a% P8 a
               M[1:0] = 00 :
  l. i; m2 l. y; ~) f+ C, W8 u               DWU = tWUUSART/(10 × Tbit ); w8 q% D$ R) f8 @
               Tbit min = 8.5us/( 10* 3.42%)
* ]- J/ j/ b/ g               Tbit min = 24.8us
! k+ ]+ Q4 O% P! M& L8 J) M1 g& _+ E+ [      所以在这个条件下最大的波特率是1/24.8us,即要小于40.3K的波特率.我们客户使用的是576000的波特率显然会丢失第一个字节,当修改为19200后,问题就解决了.
7 A6 y0 ]4 s1 _7 \% ~5 J

3 o7 ~9 {+ r* W3 H" e7 j( @2 a3 @1 x' l. w

3 P& ~& `/ T/ V) [ 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分析得不错
4 X6 d, o, ~! ~  D: Q) G3 A. E6 h
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 手机版