
1. 引言 现在大多数 STM32 系列都支持修改 LSE 的驱动能力以支持更多型号的 32.768kHz 晶体了。那么在设置 LSE 的驱动能力上,软件上是不是有需要注意的地方?6 X- ^3 C. z% r, M. t0 V / }7 o( c3 W. v8 @ 2. 问题描述 某客户在其产品的设计中,使用了 STM32L051R8T6。之前已经建议客户注意根据AN2867 以及 LSE 晶体的规格书,计算一下增益裕量,以确保 LSE 晶体可以正常起振。 但是,客户还是反馈小批量生产时,仍然发现少量的 LSE 晶体无法起振的问题。* I' g( }- ]& }( h( Q1 f% a+ \# H; O * q% L: h* p6 L 3. 问题分析与定位, H) T+ m5 ]* M7 J 3.1. 了解问题 客户听取之前的建议,学习了 AN2867,然后对他们所使用的晶体进行增益裕量计算。计算过后客户决定使用最大档的 LSE 驱动能力。但是看起来并没有解决 LSE 晶体无法起振的问题,此问题在少量电路板上仍然存在。客户分享了他们所使用晶体的规格书以及 LSE 驱动的代码。 3.2. 分析问题 阅读客户发来的晶体的规格书,电气特性如图 1 所示。 图1. 32.768K 晶体电气特性 7 k$ |$ O1 k8 O! s ![]() $ X3 i( h$ x# x( F4 ` 提取出三个重要参数:8 w0 R( U. s8 f+ X ESR = 70k ohm CL = 12.5pF C0 = 1.0 pF 根据这三个重要参数进行跨导的计算。 . S* r6 }) J }. y 9 Q! \. _" Z2 h* V) ?! F+ H ![]() ) I& ^8 v2 [. x2 \* Y 查看 STM32L051 的数据手册中查看关于 LSE 的驱动能力,如图 2: ) H( b$ j/ {2 R ![]() 可以看到,这里所标注的跨导为 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) ^ 客户的代码中,LSE 的驱动程序是这样的:
看了这段代码,大家是否发现了什么问题?7 | ^: e( d+ ]' p+ r. D 这段代码的执行顺序是这样的:打开 PWR 时钟并使能访问后备域→启动 LSE→将RTC 时钟源选择为 LSE→修改 LSE 驱动能力为最高档位。9 T$ t1 j: C2 n A 虽然说在参考手册里有这么一段话,如图 2: , n# L- ~4 X+ A7 `8 i ![]() * `5 t0 {" j& m; @( A1 n 它的意思是允许在运行过程中随时修改 LSEDRV 的值。但是,我们也不能随心所欲,想怎么改就怎么改,想在哪里改就在哪里改。 就比如现在这个问题,客户的代码是先启动 LSE,然后再去修改驱动能力为最高档的。也就是说,LSE 的启动是在最低档(默认 LSEDRV=“00”)时启动的,启动后才改的最高档。那么,刚才已经计算过,这个晶体在 LSE 最低档位驱动能力下并不能满足条件,所以不能起振的风险是很大的,而如果使用最高档位则没有问题。所以,代码选择在最低档位启动是存在风险的,如果起振没有成功,那么在下面代码) H+ c( F5 V5 ?0 a" }1 R! C
1 z0 {. `6 z( |" a2 J 跑到了 Error_Handler()中去,并死在那里,根本不会跑到后面去把驱动能力设置为最高档位。所以,这个代码的顺序是有问题的。 6 ]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
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南
适用于STM32微控制器的ΣΔ数字接口入门