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

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

[复制链接]
STMCU小助手 发布时间:2022-8-4 22:03
1. 引言
9 Z- P6 d+ H2 k2 q. p现在大多数 STM32 系列都支持修改 LSE 的驱动能力以支持更多型号的 32.768kHz 晶体了。那么在设置 LSE 的驱动能力上,软件上是不是有需要注意的地方?3 V( I& u* L3 l6 C1 \  Q) O
. N4 W( f, d6 n+ c: O

+ o  y9 Z1 d0 C' z8 g+ P6 ^7 ~2. 问题描述
2 U! v. P) V  h. I8 p8 Y: k/ }某客户在其产品的设计中,使用了 STM32L051R8T6。之前已经建议客户注意根据AN2867 以及 LSE 晶体的规格书,计算一下增益裕量,以确保 LSE 晶体可以正常起振。7 b- a! d( _0 `
但是,客户还是反馈小批量生产时,仍然发现少量的 LSE 晶体无法起振的问题。
& U- H& z, U  M) U' y. b/ V0 ~- O+ }* m, f1 W! S( J2 f5 T* l
; L4 e% l5 n  p% {( ~
3. 问题分析与定位$ N0 Y( s  C; d  s: x" s; _- O
3.1. 了解问题
% p: _2 H' r/ _2 U6 H: O  M! D客户听取之前的建议,学习了 AN2867,然后对他们所使用的晶体进行增益裕量计算。计算过后客户决定使用最大档的 LSE 驱动能力。但是看起来并没有解决 LSE 晶体无法起振的问题,此问题在少量电路板上仍然存在。客户分享了他们所使用晶体的规格书以LSE 驱动的代码。
9 j* w/ \+ C0 ], W. ^: y* L6 y6 H
3.2. 分析问题
5 ]% r, T- N4 A! n# c' X- K阅读客户发来的晶体的规格书,电气特性如图 1 所示。
- W, J! d  W+ F0 ~$ p图1. 32.768K 晶体电气特性 . `9 {/ k1 J. P0 q2 h6 f0 E6 _
R}C7TUT]BBFVHR7[DA3(TAB.png
; Z5 p; q+ C/ N, v& i1 q" K( z 9 {# k* \: }* S( v
提取出三个重要参数:
, _# [: A# s, X1 S+ Y. _ESR = 70k ohm
. I0 ~# B! B# M  S$ `CL = 12.5pF
: b4 O2 Q% ~% k2 Q: _C0 = 1.0 pF
# e& d, Q% c/ D, C$ d根据这三个重要参数进行跨导的计算。 " @5 d: E: x  V/ g1 c- g* e) N
0 S0 I+ b7 f8 Z9 ], f9 m
O@]5S2YHQ{X5(ZR~83HKS.png % ]7 e3 X. }' m- @8 ]+ g

; z5 d" k+ L5 k) }% I* E% U查看 STM32L051 的数据手册中查看关于 LSE 的驱动能力,如图 2:
8 K- X+ g/ K6 o6 S7 a5 `  \$ F5 }- c& v
+ J* s: |+ h* \7 m& [
CQYSMNQX2JJ2$VX9J5QSCA0.png ) _' P" R- K3 }, a$ C! R
+ v1 |% y. ^, r: n! H
可以看到,这里所标注的跨导为 Gm,值为最大值,也就是说,并不需要去计算增益裕量,只需要计算出的 gmcrit满足这个最大值条件就可以了。从表格可以看到,STM32L051的 LSE 驱动能力在最低档位(LSEDRV=“00”)时,Gm最大值为 0.5uA/V;在最高档位 (LSEDRV=“11”)时,Gm最大值为 2.7uA/V。
/ x+ t1 N; Z9 ?0 w" W* q$ S7 B- k7 q  F所以,前面所计算出来的值为 2.163uA/V 的 gmcrit只能使用最高档位(LSEDRV=“11”)来驱动。
5 A6 ~, ?) U& C9 a" U根据客户的反馈,他已经在程序里将 STM32L051 的 LSE 晶体设置到最高档位 LSEDRV=“11”了,按道理应该是可以正常驱动的。那为什么还是有驱动的问题呢?现在来检查一下客户的代码。
/ M. }9 h8 b7 u
+ f2 u2 q! Y( }" V! O6 q" s& |客户的代码中,LSE 的驱动程序是这样的:
  1. __HAL_RCC_PWR_CLK_ENABLE();' C) U! o9 B. u: j( \
  2. HAL_PWR_EnableBkUpAccess();- L- V+ h# w1 S  `% O
  3. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;; E( u; @0 [0 ]: j: T, v) U5 G! O" E9 U
  4. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    9 _6 `9 E! Y' ^+ F6 y
  5. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
    4 u( C% b" ~& s4 L6 u! w
  6. if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)6 y; O& d& t' `
  7. {
    6 ?3 ]- \+ g9 C2 a9 [% c2 p
  8. Error_Handler();5 r0 x4 i. ]/ N& n7 ^
  9. }/ i( ^/ T3 N, l% [1 B( A
  10. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
    + x. |0 M; P: `7 b/ i9 A6 a0 ]/ {$ ]& Y
  11. PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;4 f& q+ n. Y9 }2 \! E# G
  12. if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)9 \  I* `. J# r" C/ g
  13. {
    - E. ^. R& y! G: t# t
  14. Error_Handler();; ^2 ?1 X) {. V. f, X1 C+ d
  15. }+ Y, a0 m  v2 P
  16. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH);
复制代码
# D' V3 l4 }! o3 Q

* s6 }* V' W2 g3 Q看了这段代码,大家是否发现了什么问题?
" u3 l4 W3 _2 z这段代码的执行顺序是这样的:打开 PWR 时钟并使能访问后备域→启动 LSE→将RTC 时钟源选择为 LSE→修改 LSE 驱动能力为最高档位。; K0 j. ^$ C& n+ @' l! G9 \+ ~
虽然说在参考手册里有这么一段话,如图 2:1 h9 y) A8 {/ b% j% \8 f

* w  @2 J5 O, `: _  b  T! U

+ L. W6 p) g' y JKQ9}G8JS3G_T`]]UXFB)FK.png 9 \8 c4 w# l# [& O/ a, Q, N( F! [

- R$ {4 L' g1 ~
! e* w/ w5 V% ^2 T; N# P: t" Y( S  |它的意思是允许在运行过程中随时修改 LSEDRV 的值。但是,我们也不能随心所欲,想怎么改就怎么改,想在哪里改就在哪里改。
4 K; X- p6 D  X0 h1 Y0 X0 M( U- b就比如现在这个问题,客户的代码是先启动 LSE,然后再去修改驱动能力为最高档的。也就是说,LSE 的启动是在最低档(默认 LSEDRV=“00”)时启动的,启动后才改的最高档。那么,刚才已经计算过,这个晶体在 LSE 最低档位驱动能力下并不能满足条件,所以不能起振的风险是很大的,而如果使用最高档位则没有问题。所以,代码选择在最低档位启动是存在风险的,如果起振没有成功,那么在下面代码, w3 \( ?$ ?; x6 W! {1 c
  1. if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)( L/ W) S5 J- V3 x9 b
  2. { , E( k) ~& e% {+ }( U
  3. Error_Handler();
    ) x3 x9 p7 V) J3 |: s
  4. }
复制代码

) F+ ^' T7 e; v: ?5 {* y5 [6 |$ N& k3 O1 P) f
跑到了 Error_Handler()中去,并死在那里,根本不会跑到后面去把驱动能力设置为最高档位。所以,这个代码的顺序是有问题的。
5 T  Z0 A4 `+ u+ ^  l" T3 H* x: t& |
8 p) Z2 u  G3 c/ @; c5 G4 l/ z$ L! |8 `! l' y
完整版请查看:附件- G) V0 z% K' Q6 S1 O; w; `: F5 ~

* _5 Z* Q; \& z# H9 q8 \- j6 H* _. Q+ [. |* r

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

下载

400.28 KB, 下载次数: 32

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

举报

0个回答

所属标签

相似分享

官网相关资源

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