Почему STM32 не запускается от внешнего кварца?
Обновлено Редакция GAW
Встроенный генератор HSE раскачивает кварц не всегда. После включения бита HSEON программа ждёт флаг HSERDY в регистре RCC_CR; если генератор не запустился, код зависает в этом цикле или функция настройки тактирования возвращает ошибку по тайм-ауту.
Главная причина — запас усиления
Генератор запустится, только если его крутизна gm заметно больше критической, которую требует кварц. ST в AN2867 считает её так:
и требует запас gm / gm crit больше 5. У STM32F103 крутизна HSE по даташиту не меньше 25 мА/В. Запас съедают большое ESR дешёвого кварца, большая ёмкость нагрузки CL и неверные конденсаторы. Как оценить запас для своего кварца, разбирает термин «запас усиления генератора», а ёмкости считает калькулятор конденсаторов для кварца.
Что проверить
| Признак | Причина | Что сделать |
|---|---|---|
| Кварц 20 или 25 МГц | HSE работает с кварцем 4–16 МГц | взять кварц 8 МГц или подать готовый тактовый сигнал |
| Включён бит HSEBYP | генератор ждёт внешний сигнал, а не кварц | для кварца HSEBYP = 0 |
| Частота примерно втрое ниже маркировки | обертонный кварц: без LC-фильтра генератор раскачивает основную гармонику | такие кварцы делают на высокие частоты, вне 4–16 МГц; взять кварц основной гармоники |
| Запускается через раз | мал запас усиления | кварц с меньшим ESR, пересчитать C1 и C2 |
| Перестаёт работать от касания | длинные дорожки, грязь, влага | кварц ближе к выводам, земля под ним |
Время запуска у кварца на несколько мегагерц — единицы миллисекунд, по даташиту STM32F103 типично 2 мс. Если флаг HSERDY не встаёт за сотни миллисекунд, ждать дольше бесполезно.
Как правильно развести кварц на плате, показывает схема «Кварцевый генератор микроконтроллера», а как от кварца 8 МГц получить 72 МГц — калькулятор тактирования STM32. Состав и выводы семейства — на странице STM32F1.
Похожие вопросы
Как понять, что STM32 работает не от кварца, а от HSI?
Посмотрите биты SWS в регистре RCC_CFGR: они показывают источник системной частоты. Если включена система контроля CSS и кварц отказал, STM32F1 сам переходит на внутренний HSI 8 МГц и вызывает NMI; без обработки флага CSSC прерывание будет повторяться.
Кварц запустился, но скорость UART и задержки неверные. Почему?
Скорее всего, программа считает, что кварц другой частоты: библиотеки ST вычисляют частоты шин из константы HSE_VALUE, и если она не совпадает с кварцем на плате, все делители считаются неверно. Проверьте эту константу в настройках проекта и биты SWS, показывающие реальный источник частоты.
Подойдёт ли кварц на 20 или 25 МГц?
Как кварц — нет: генератор HSE у STM32F103 рассчитан на 4–16 МГц. Частоту до 25 МГц можно подать только готовым тактовым сигналом на OSC_IN в режиме HSEBYP.
Источники
- STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx — 7.2.1 — HSE: кварц или керамический резонатор 4–16 МГц; внешний тактовый сигнал до 25 МГц в режиме HSEBYP, OSC_OUT при этом в высокоимпедансном состоянии; флаг HSERDY в RCC_CR показывает, что генератор устойчив; 7.2.2 — HSI 8 МГц, заводская калибровка 1 % при 25 °C; 7.2.7 — CSS: при отказе HSE система переходит на HSI, генерируется NMI, флаг сбрасывают битом CSSC; рис. 8 — от HSI через PLL не выше 64 МГц
- STMicroelectronics. AN2867 Rev 24. Guidelines for oscillator design on STM8AF/AL/S and STM32 MCUs/MPUs — 3.4 — gm_crit = 4·ESR·(2πF)²·(C0 + CL)², запас усиления gm/gm_crit больше 5; 3.6 — генератор на кварце в несколько мегагерц запускается за несколько миллисекунд, проблемы запуска обычно из-за недостаточного запаса усиления: CL1 и CL2 слишком малы или велики либо слишком велико ESR; 3.9.2 — высокочастотные кварцы обычно делают для третьей механической гармоники: пластину режут на частоту втрое ниже рабочей, а основную гармонику подавляет LC-цепь в генераторе (рис. 11); 3.9.3 — генераторы STM32 проверены только на основной гармонике
- STMicroelectronics. DS5319 Rev 20. STM32F103x8, STM32F103xB datasheet — табл. 22 — HSE 4–16 МГц, типично 8 МГц; крутизна генератора при запуске не менее 25 мА/В; время запуска 2 мс типично, сильно зависит от кварца
Нашли ошибку?
Смотрите также
- Кварцевый генератор микроконтроллераСхема Пирса, C1 и C2 по CL, запас по усилению, часовой кварц, разводка
- Конденсаторы для кварцаC1 и C2 по CL, запас генерации, уход частоты
- Тактирование STM32PLL под нужную частоту, шины, флеш-память, регистры RCC и код
- Запас по усилению генератораgm / gmcrit не меньше 5 — кварц надёжно запустится