Почему не запускается кварц LSE 32,768 кГц на STM32L0?
Обновлено Редакция GAW
Часовой кварц у STM32L0 питает RTC и может тактировать LPUART и LPTIM. Генератор LSE экономичный, поэтому его усиление невелико и подбор кварца критичнее, чем у быстрого HSE. Но прежде чем менять кварц, проверьте программную сторону.
Шаг 1: доступ к домену RTC
Биты LSEON, LSEDRV, RTCSEL и RTCEN в RCC_CSR защищены от записи. Пока в PWR_CR не стоит бит DBP, запись в них молча игнорируется — и кажется, что генератор не стартует.
// Enable LSE on STM32L0 (RM0377, 6.4.1, 7.3.20)
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
PWR->CR |= PWR_CR_DBP; // unlock the RTC domain
RCC->CSR = (RCC->CSR & ~RCC_CSR_LSEDRV) | RCC_CSR_LSEDRV_1; // medium high drive in one write;
// never write 00: it locks LSEDRV until POR/RTC reset
RCC->CSR |= RCC_CSR_LSEON;
while (!(RCC->CSR & RCC_CSR_LSERDY)) { } // add a timeout in real code
Шаг 2: хватит ли усиления
По AN2867 кварц запустится надёжно, если его критическая крутизна меньше предельной для выбранного уровня LSEDRV:
| Уровень LSEDRV | Gm_crit_max у STM32L0 |
|---|---|
| 00, Low | 0,5 мкА/В |
| 01, Medium low | 0,75 мкА/В |
| 10, Medium high | 1,7 мкА/В |
| 11, High | 2,7 мкА/В |
Пример (наш расчёт для условного кварца с ESR 70 кОм и C0 = 1 пФ): при CL = 6 пФ gmcrit ≈ 0,58 мкА/В — уровня Low уже не хватает, нужен хотя бы Medium low; при CL = 12,5 пФ gmcrit ≈ 2,16 мкА/В — подходит только High. После сброса по питанию LSEDRV = 00, то есть самый слабый уровень. Важная оговорка RM0377: если программа сама запишет в LSEDRV значение 00, поле больше не изменится программно до сброса по питанию или сброса домена RTC — поэтому нужный уровень записывают сразу одной командой, без промежуточного обнуления. Подробнее о запасе — в термине «Запас по усилению генератора», конденсаторы под CL подбирает калькулятор конденсаторов кварца.
Шаг 3: плата
Дорожки к кварцу делают короткими, а соседний вывод PC13 не переключают: по AN2867 активность PC13, например выход RTC_OUT, сдвигает частоту LSE. Про сам кварц и его уход — термин «Часовой кварц», про домен с RTC — «Резервный домен». Остальное о семействе — на странице STM32L0.
Похожие вопросы
Можно ли проверить LSE осциллографом?
Только щупом с очень малой входной ёмкостью: AN2867 предупреждает, что вход LSE чувствителен к ёмкости нагрузки, и рекомендует щуп 0,1 пФ. Обычный щуп 10X с ёмкостью около десятка пикофарад сам может сорвать генерацию или сдвинуть частоту. Проще смотреть флаг LSERDY и частоту RTC на выводе калибровочного выхода.
Почему после перепрошивки LSEDRV не вернулся к нулю?
Биты LSEDRV, как и LSEON, лежат в домене RTC и по RM0377 сбрасываются только сбросом по питанию или сбросом домена RTC. Обычный сброс кнопкой или перепрошивка их не трогают, поэтому старая настройка может сохраниться и замаскировать проблему с кварцем. А если в LSEDRV однажды записали 00, по RM0377 поле заблокировано, и поднять усиление можно только после такого сброса.
Можно ли подать на OSC32_IN готовый сигнал 32,768 кГц?
Да, для этого есть бит LSEBYP в RCC_CSR: в режиме обхода генератор не работает, а внешний сигнал идёт прямо в тактовую цепь. Бит LSEBYP можно записать только при выключенном LSE.
Источники
- STMicroelectronics. AN2867 Guidelines for oscillator design on STM8AF/AL/S and STM32 MCUs/MPUs, Rev 24 (February 2026) — разд. 3.4: gmcrit = 4 · ESR · (2πF)² · (C0 + CL)², при заданном Gm_crit_max нужно gmcrit < Gm_crit_max; отношение отрицательного сопротивления к ESR рекомендуется больше 3 для LSE; табл. 5: LSE STM32L0 — уровни Low, Medium low, Medium high, High: gm (min) 2,5 / 3,75 / 8,5 / 13,5 мкА/В, Gm_crit_max 0,5 / 0,75 / 1,7 / 2,7 мкА/В; разд. 3.5.2: напряжение на LSE очень чувствительно к ёмкости щупа, нужен щуп 0,1 пФ; разд. 7.4: активность PC13 (например RTC_OUT) может сдвигать частоту LSE
- STMicroelectronics. RM0377 Reference manual: Ultra-low-power STM32L0x1 advanced Arm-based 32-bit MCUs, Rev 10 — разд. 7.2.5: LSE включают битом LSEON, усиление LSEDRV[1:0] можно менять на ходу, флаг LSERDY; разд. 7.3.20: RCC_CSR, значение после POR 0x0C00 0004, LSEON, LSEBYP, RTCSEL, LSEDRV и RTCEN в домене RTC и защищены от записи — нужен DBP в PWR_CR, сбрасываются только сбросом домена RTC; LSEDRV — биты 12:11: 00 Lowest, 01 Medium low, 10 Medium high, 11 Highest, очищаются сбросом по питанию и сбросом RTC; после записи 00 содержимое LSEDRV программно изменить нельзя; разд. 6.4.1: DBP — бит 8 PWR_CR
Нашли ошибку?
Смотрите также
- Запас по усилению генератораgm / gmcrit не меньше 5 — кварц надёжно запустится
- Часовой кварц 32 768 ГцКамертонный кварц для RTC: 2¹⁵ Гц, малая нагрузка
- Конденсаторы для кварцаC1 и C2 по CL, запас генерации, уход частоты
- STM32L0Cortex-M0+, до 32 МГц, малое потребление: L010, L0x1, L0x2 с USB, L0x3 с ЖКИ — линейки и распиновки
- Резервный домен (backup domain)Часть STM32 с питанием от VBAT: RTC, LSE и резервные регистры