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

一个软件引起的 LSE 驱动不良的问题

[复制链接]
STMCU小助手 发布时间:2022-8-4 22:03
1. 引言
: E4 M4 L- }; e$ Z现在大多数 STM32 系列都支持修改 LSE 的驱动能力以支持更多型号的 32.768kHz 晶体了。那么在设置 LSE 的驱动能力上,软件上是不是有需要注意的地方?6 X- ^3 C. z% r, M. t0 V

( [1 `& R& S! s+ B
/ }7 o( c3 W. v8 @
2. 问题描述
/ R0 A) Q8 K9 r, q: T某客户在其产品的设计中,使用了 STM32L051R8T6。之前已经建议客户注意根据AN2867 以及 LSE 晶体的规格书,计算一下增益裕量,以确保 LSE 晶体可以正常起振。
* c) _- J. C/ K3 j& D* _但是,客户还是反馈小批量生产时,仍然发现少量的 LSE 晶体无法起振的问题。* I' g( }- ]& }( h( Q1 f% a+ \# H; O
* q% L: h* p6 L

) [' K8 M) G! y, B3. 问题分析与定位, H) T+ m5 ]* M7 J
3.1. 了解问题
, C# G- [) M2 l. e客户听取之前的建议,学习了 AN2867,然后对他们所使用的晶体进行增益裕量计算。计算过后客户决定使用最大档的 LSE 驱动能力。但是看起来并没有解决 LSE 晶体无法起振的问题,此问题在少量电路板上仍然存在。客户分享了他们所使用晶体的规格书以LSE 驱动的代码。
! z9 T1 u; F" C* q- e; R6 `
/ [7 ^" X. A4 k! w# V3.2. 分析问题
! L7 \3 s+ S; x5 N阅读客户发来的晶体的规格书,电气特性如图 1 所示。
0 l- D# i6 ]  P$ @( x3 o图1. 32.768K 晶体电气特性 7 k$ |$ O1 k8 O! s
R}C7TUT]BBFVHR7[DA3(TAB.png 4 b" }4 ^8 h; Q! y$ N; A' g5 f
$ X3 i( h$ x# x( F4 `
提取出三个重要参数:8 w0 R( U. s8 f+ X
ESR = 70k ohm
  M2 l# `9 C' _+ r4 s: TCL = 12.5pF
6 X1 o5 m- k7 r8 wC0 = 1.0 pF
2 q( _5 u4 Y+ b, p. y1 B7 v根据这三个重要参数进行跨导的计算。 . S* r6 }) J  }. y
9 Q! \. _" Z2 h* V) ?! F+ H
O@]5S2YHQ{X5(ZR~83HKS.png 9 u  Q# `1 z  p
) I& ^8 v2 [. x2 \* Y
查看 STM32L051 的数据手册中查看关于 LSE 的驱动能力,如图 2:
3 M9 @0 j) }* M9 D) U) H( b$ j/ {2 R

9 V5 A) m- V6 C' j4 u CQYSMNQX2JJ2$VX9J5QSCA0.png ( ]4 }1 Y; t) z; s9 M4 b  X- t. _

8 l% O1 C- E% q( g6 Q可以看到,这里所标注的跨导为 Gm,值为最大值,也就是说,并不需要去计算增益裕量,只需要计算出的 gmcrit满足这个最大值条件就可以了。从表格可以看到,STM32L051的 LSE 驱动能力在最低档位(LSEDRV=“00”)时,Gm最大值为 0.5uA/V;在最高档位 (LSEDRV=“11”)时,Gm最大值为 2.7uA/V。0 p0 c/ _( s" p
所以,前面所计算出来的值为 2.163uA/V 的 gmcrit只能使用最高档位(LSEDRV=“11”)来驱动。" W0 \) ~( K8 Y6 k* `, [6 x
根据客户的反馈,他已经在程序里将 STM32L051 的 LSE 晶体设置到最高档位 LSEDRV=“11”了,按道理应该是可以正常驱动的。那为什么还是有驱动的问题呢?现在来检查一下客户的代码。! M5 G3 q% t% h) ^

: j; O( H+ A- j) L客户的代码中,LSE 的驱动程序是这样的:
  1. __HAL_RCC_PWR_CLK_ENABLE();
    : J9 A6 m8 L/ W/ Z" w$ k9 _/ Y
  2. HAL_PWR_EnableBkUpAccess();% N+ {/ i2 W) v2 K# Q+ B$ r
  3. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;+ Y2 e8 \% ]: b
  4. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    ) x" K' v! w9 s5 @
  5. RCC_OscInitStruct.LSEState = RCC_LSE_ON;+ Y$ N- j; r% G: U) Q
  6. if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)7 T/ o( e+ t, w* c, E) k& W+ W: a
  7. {
    7 k4 I" w7 b3 b% W' X
  8. Error_Handler();
    " d" p+ m5 ^4 R0 u: C9 p* c
  9. }
    $ J9 f! n& I  I1 T
  10. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;5 A  M, A  F, R5 r
  11. PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
      n( z6 R. [6 o! ^9 a8 X
  12. if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)& }9 _+ ]+ D+ q4 ~7 a
  13. { / y4 L! {4 _1 M9 R
  14. Error_Handler();" z+ {% m2 W9 ^: i# x
  15. }
    - l2 }# f) t9 k5 M% y) B
  16. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH);
复制代码
- H* t9 ]/ o$ _- |

, ?, z- C- c2 h( I. B. p看了这段代码,大家是否发现了什么问题?7 |  ^: e( d+ ]' p+ r. D
这段代码的执行顺序是这样的:打开 PWR 时钟并使能访问后备域→启动 LSE→将RTC 时钟源选择为 LSE→修改 LSE 驱动能力为最高档位。9 T$ t1 j: C2 n  A
虽然说在参考手册里有这么一段话,如图 2:
7 g$ x/ o/ }9 g8 N3 i/ k
( V+ i( A, y+ E- o
, n# L- ~4 X+ A7 `8 i
JKQ9}G8JS3G_T`]]UXFB)FK.png
- e0 }* m$ l1 P7 f; E! m
. O( z1 i4 }( j6 K. n * `5 t0 {" j& m; @( A1 n
它的意思是允许在运行过程中随时修改 LSEDRV 的值。但是,我们也不能随心所欲,想怎么改就怎么改,想在哪里改就在哪里改。
; M$ e9 W. ~/ h) Q' a5 ^就比如现在这个问题,客户的代码是先启动 LSE,然后再去修改驱动能力为最高档的。也就是说,LSE 的启动是在最低档(默认 LSEDRV=“00”)时启动的,启动后才改的最高档。那么,刚才已经计算过,这个晶体在 LSE 最低档位驱动能力下并不能满足条件,所以不能起振的风险是很大的,而如果使用最高档位则没有问题。所以,代码选择在最低档位启动是存在风险的,如果起振没有成功,那么在下面代码) H+ c( F5 V5 ?0 a" }1 R! C
  1. if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)4 N+ t# I& d# J0 G. @+ R: v- q. P
  2. { 8 v- c, l9 q. g- e0 K) M
  3. Error_Handler();. q. `$ V, V# i) x6 }( N' R* I
  4. }
复制代码
0 {* T' x7 X/ a% n
1 z0 {. `6 z( |" a2 J
跑到了 Error_Handler()中去,并死在那里,根本不会跑到后面去把驱动能力设置为最高档位。所以,这个代码的顺序是有问题的。
( @% o1 f5 k; u% p0 P3 Y6 ]9 A+ x4 [! ?. C4 n0 d4 a8 H$ q
+ t2 u  d5 @; ~. o8 K0 k$ y; o7 l
完整版请查看:附件3 G/ N; t, g( \
3 j5 ^9 K3 d/ B; U/ v! d( D0 o
# X$ d# l9 r7 x. {( C

LAT1043 一个软件引起的LSE驱动不良的问题_v1.0.pdf

下载

400.28 KB, 下载次数: 30

收藏 评论0 发布时间:2022-8-4 22:03

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版