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

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

[复制链接]
STMCU小助手 发布时间:2022-8-4 22:03
1. 引言5 A1 a: `0 u. ?6 y; E
现在大多数 STM32 系列都支持修改 LSE 的驱动能力以支持更多型号的 32.768kHz 晶体了。那么在设置 LSE 的驱动能力上,软件上是不是有需要注意的地方?0 {6 h( l0 r) q; |2 w: v" o

; _# a4 I, t  d8 ^5 A

4 X& F/ q2 x4 o+ E5 n2. 问题描述
' f. X& k: N, y某客户在其产品的设计中,使用了 STM32L051R8T6。之前已经建议客户注意根据AN2867 以及 LSE 晶体的规格书,计算一下增益裕量,以确保 LSE 晶体可以正常起振。
3 J. F6 a( [8 t9 ~# n, i- w$ W* p但是,客户还是反馈小批量生产时,仍然发现少量的 LSE 晶体无法起振的问题。2 p& _) H5 b3 t+ v7 l+ e, `
  p2 S4 |% b8 C3 s

$ g9 V: F2 C+ m: U2 a  J3. 问题分析与定位! K- J( S! P; t: \; A' |! ~; _+ [# r
3.1. 了解问题! g) b" k7 d2 W7 @# C7 |$ T
客户听取之前的建议,学习了 AN2867,然后对他们所使用的晶体进行增益裕量计算。计算过后客户决定使用最大档的 LSE 驱动能力。但是看起来并没有解决 LSE 晶体无法起振的问题,此问题在少量电路板上仍然存在。客户分享了他们所使用晶体的规格书以LSE 驱动的代码。
; N! V: Y; z  I  C2 l
8 e' d# z. @; j) f3.2. 分析问题
! ?- `2 V4 |' l( ]4 n: W阅读客户发来的晶体的规格书,电气特性如图 1 所示。
, A5 Y0 B( w) v  f- Q7 w图1. 32.768K 晶体电气特性
: N* K) ^& K* _, x% l$ `2 l R}C7TUT]BBFVHR7[DA3(TAB.png
5 K  Z+ W7 w" L! i# c
; a3 p6 ?) U3 N) O. G# `提取出三个重要参数:* b+ g" U) Q2 P
ESR = 70k ohm
: j: Q) {4 d) u/ C; R, MCL = 12.5pF/ u! k5 ]$ k9 F% t* b/ [/ `
C0 = 1.0 pF, ~: q* w4 [1 p, X% P
根据这三个重要参数进行跨导的计算。   v6 b! J3 O4 Z5 n# B0 T

. u) W5 o6 p: p- I O@]5S2YHQ{X5(ZR~83HKS.png & D! ^' T) T' k) f1 k9 ], e) l

% ^" \# b7 Y& x2 y* }" p* z查看 STM32L051 的数据手册中查看关于 LSE 的驱动能力,如图 2:# n" \8 ~8 S' ~. m$ u& d. N

; u6 O2 J) _7 }! \# F3 v7 V
6 W* V' M3 j! z2 L& i
CQYSMNQX2JJ2$VX9J5QSCA0.png
( c% J' ~7 N  _7 P# j0 \' O- B
9 f. x$ r( p% u1 l% N可以看到,这里所标注的跨导为 Gm,值为最大值,也就是说,并不需要去计算增益裕量,只需要计算出的 gmcrit满足这个最大值条件就可以了。从表格可以看到,STM32L051的 LSE 驱动能力在最低档位(LSEDRV=“00”)时,Gm最大值为 0.5uA/V;在最高档位 (LSEDRV=“11”)时,Gm最大值为 2.7uA/V。( k$ J) e' G# k9 k6 z
所以,前面所计算出来的值为 2.163uA/V 的 gmcrit只能使用最高档位(LSEDRV=“11”)来驱动。8 h; G- U1 V$ S' d3 N& k1 B
根据客户的反馈,他已经在程序里将 STM32L051 的 LSE 晶体设置到最高档位 LSEDRV=“11”了,按道理应该是可以正常驱动的。那为什么还是有驱动的问题呢?现在来检查一下客户的代码。
8 k3 h3 u3 f9 F+ m9 R9 \+ G
. q: @3 a( [) d: z, G客户的代码中,LSE 的驱动程序是这样的:
  1. __HAL_RCC_PWR_CLK_ENABLE();% M, l3 |: L# W9 [7 [0 J" c7 `
  2. HAL_PWR_EnableBkUpAccess();
    - S; ?! e. ]& \1 Q6 g/ Z, {+ }. L
  3. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
    ! _. {5 O# Q5 W- j( [# f) f
  4. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    & b8 z* H+ d1 |2 M1 n1 `7 |/ u
  5. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
    9 Q6 K% ~1 f# y+ p/ O6 [
  6. if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)6 _7 R( ~2 y# E! ~6 k, L2 ?
  7. {
    3 l) X4 J7 w' T$ t7 \
  8. Error_Handler();' z9 ]  \& U9 ?: A7 y6 h5 W; i2 `
  9. }; o5 D8 \% g$ B- Q% F4 E* p9 _5 Z
  10. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;# y: U+ o: H0 D: A% {! _' W
  11. PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
    # _; A% c" U8 ~5 T
  12. if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK): I8 @5 d2 z; r! d- ]! n
  13. { & \: v% R" o9 h! E/ `0 @
  14. Error_Handler();3 j% x$ p3 i' Z8 X" z
  15. }
    1 y$ K+ J$ I9 V5 ^* J5 D+ B
  16. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH);
复制代码
$ V+ M$ L1 Z* C' k5 x

; M: \9 k9 r  I& d- f看了这段代码,大家是否发现了什么问题?
3 e+ H8 i2 o! }+ {  _这段代码的执行顺序是这样的:打开 PWR 时钟并使能访问后备域→启动 LSE→将RTC 时钟源选择为 LSE→修改 LSE 驱动能力为最高档位。
( |4 y7 {5 Q5 k& h) v虽然说在参考手册里有这么一段话,如图 2:
# _* @/ ~8 E' e! I" }) R  A& H; _; _3 X) z9 Z$ l/ S8 @

( Q1 Z  C# Q+ U) e0 F JKQ9}G8JS3G_T`]]UXFB)FK.png
( \3 Q, v2 }( V+ i$ q# V  [8 j2 o4 G1 e; G' ^
, T3 z: A% r9 x" F& @8 M1 [- U
它的意思是允许在运行过程中随时修改 LSEDRV 的值。但是,我们也不能随心所欲,想怎么改就怎么改,想在哪里改就在哪里改。
% g" E% d$ O$ V1 K$ g+ o6 m, E就比如现在这个问题,客户的代码是先启动 LSE,然后再去修改驱动能力为最高档的。也就是说,LSE 的启动是在最低档(默认 LSEDRV=“00”)时启动的,启动后才改的最高档。那么,刚才已经计算过,这个晶体在 LSE 最低档位驱动能力下并不能满足条件,所以不能起振的风险是很大的,而如果使用最高档位则没有问题。所以,代码选择在最低档位启动是存在风险的,如果起振没有成功,那么在下面代码
8 Y0 Y# @) W; s- ?7 K8 _# E
  1. if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    1 ^0 J( D. [: D, K$ |1 b: y
  2. {
    ! |# P' R* {+ n* @5 q0 l
  3. Error_Handler();5 j, m2 i' v+ U! H0 s
  4. }
复制代码

1 h& r! V6 ]* V; m
' T. |, K; Q9 d# s8 ^) k7 T跑到了 Error_Handler()中去,并死在那里,根本不会跑到后面去把驱动能力设置为最高档位。所以,这个代码的顺序是有问题的。+ d7 A9 Z5 f) S; l4 z; a+ y$ a

- U7 {. N& m1 v, P: c2 Y" s5 U7 k' q5 ~6 F2 P4 i+ _
完整版请查看:附件
0 T: s) W  G" t) t+ V% |0 H
  b( ^) y6 d' C* m% M7 A/ r5 u) \: C( V9 s1 p$ I

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

下载

400.28 KB, 下载次数: 55

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

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