STM8AL 使用 LSE(外部低速晶振)校准 HSI(内部高速振荡器)时,小批量试产中 3% 产品校准后频率与 16MHz 偏差较大,核心原因是 LSE 起振后未等待足够稳定时间,官方代码默认 60ms 延迟适配不了客户选用的晶振。本文基于 ST 官方 LAT1407 应用笔记,详解问题根源、1 分钟代码修改方案及校准关键原则,适用于 STM8L/STM8AL 系列依赖 HSI+LSE 校准的场景。
1. 核心问题与现象
1.1 应用场景
- 硬件:STM8AL 芯片,LSE 选用 32.768kHz 外部晶振,HSI 作为系统时钟(目标频率 16MHz);
- 软件:基于 ST 官方演示代码 STM8L15x_AN3101_FW_V1.1.0 开发,启用 LSE 作为 HSI 校准参考源;
- 生产情况:小批量试产,约 3% 产品校准后 HSI 频率偏差超标,其余产品正常。
1.2 关键特征
- 代码验证:客户代码与官方演示代码完全一致,跟踪执行无异常,排除代码移植问题;
- 核心矛盾:仅部分产品异常,且异常与晶振型号相关,初步锁定 LSE 稳定时序问题。
2. 问题根源:LSE 稳定时间不足
2.1 LSE 的关键特性(参考手册 RM0031)
- LSERDY 标志位:仅表示 LSE 起振成功,不代表频率稳定;
- 稳定时间要求:LSE 起振后,需额外等待
tSU(LSE)(稳定时间)才能达到稳定频率,不同型号晶振的tSU(LSE)差异极大; - 官方代码缺陷:ST 官方代码中 LSE 稳定延迟约 60ms(通过
waitforstab=0x3C702循环实现,CPU 频率 16MHz 时,循环一圈 4 条指令,计算得约 61.89ms),该延迟是为官方开发板晶振设计,客户选用的晶振需要更长稳定时间。
2.2 时序不匹配的直接影响
- 正常逻辑:LSE 稳定后,才能作为精准参考源校准 HSI,确保 HSI 频率偏差在允许范围;
- 异常逻辑:部分产品的 LSE 未完全稳定就开始校准,参考频率不准,导致 HSI 校准后偏差超标。
3. 解决方案:延长 LSE 稳定延迟
无需修改硬件,仅需调整代码中 LSE 稳定等待的循环计数,确保晶振完全稳定后再启动校准:
3.1 代码修改位置
找到
hsi_calibration.c文件中的CL_ConfigForHSI函数,定位 LSE 稳定等待代码:#ifdef USE_REFERENCE_LSE
uint32_t counter=0, waitforstab=0x3C702; // 官方默认值,对应约60ms
// 启用LSE时钟、等待LSERDY置位等配置...
/* wait for stabilization of LSE clock */
while (counter < waitforstab)
{
counter++;
}
#endif
3.2 延迟参数调整
将
waitforstab值修改为对应 90ms 的计数(按 16MHz CPU 频率计算),修改后代码:#ifdef USE_REFERENCE_LSE
uint32_t counter=0, waitforstab=0x59784; // 对应约90ms(根据实际晶振微调)
// 其余配置不变...
while (counter < waitforstab)
{
counter++;
}
#endif
- 计算逻辑:16MHz CPU 每指令周期 62.5ns,循环 1 条指令(
counter++)耗时 62.5ns,90ms 需循环次数 = 90ms / 62.5ns = 1.44×10^6,十六进制约为 0x15F90,实际可通过示波器观测 LSE 波形,微调至稳定后再确定最终值; - 验证效果:修改后,所有异常产品校准结果均达标,批量生产无偏差超标情况。
3.3 灵活调整技巧
若不确定具体延迟值,可按以下步骤测试:
- 先将
waitforstab设为 0x80000(对应约 130ms),确保覆盖大多数晶振的稳定时间; - 批量测试无异常后,逐步减小数值,找到最小稳定延迟(兼顾校准效率与稳定性)。
4. 关键注意事项
- 晶振选型必查规格书:不同品牌、型号的 32.768kHz 晶振,
tSU(LSE)差异显著,需在规格书中确认最小稳定时间; - 延迟时间适配:校准代码的 LSE 稳定延迟需大于晶振的
tSU(LSE),避免 “刚好达标”,建议预留 20%~30% 裕度; - 不依赖 LSERDY 标志:LSERDY 仅表示起振,不能作为稳定判断依据,必须额外添加延迟;
- 批量生产验证:小批量试产时需覆盖不同批次晶振,确保延迟时间适配所有来料。
STM8AL HSI 校准偏差大的核心是 “LSE 稳定时间不匹配”,官方代码的固定延迟无法适配所有晶振。通过延长 LSE 稳定等待时间(如调整至 90ms),即可彻底解决问题,无需复杂硬件改动。
该问题提醒我们,时序类校准场景中,不能直接复用官方代码的固定参数,需结合实际选用的外设(如晶振)规格书,针对性调整时序等待时间,确保参考源稳定后再执行核心操作。
阅读全文
92