Система контроля тактирования (CSS)
Кварц может отказать прямо во время работы: трещина, отвалившийся вывод, грязь на плате. Без тактового сигнала микроконтроллер просто остановится. Система контроля тактирования STM32 замечает пропажу сигнала HSE и переводит микроконтроллер на внутренний генератор, давая программе шанс среагировать.
Обновлено Редакция GAW
Система контроля тактирования (clock security system, CSS) — встроенный в STM32 детектор, который следит за сигналом высокочастотного кварцевого генератора HSE и при его пропадании автоматически переключает микроконтроллер на внутренний RC-генератор HSI. Включается программно битом CSSON регистра RCC_CR; после включения детектор начинает работать, как только HSE запустился, и выключается, когда HSE останавливают.
Что происходит при отказе HSE
По RM0008 (разд. 7.2.7) и RM0090 (разд. 7.2.7):
- Генератор HSE выключается.
- Если HSE был источником системной частоты — напрямую или через PLL, — SYSCLK переключается на HSI, а PLL выключается.
- Событие отказа подаётся на аварийный вход break таймера TIM1 (и TIM8 — у STM32F103 high- и XL-density и у STM32F4; у F103x8/xB его нет): их выходы ШИМ переходят в безопасное состояние, как описано в статье о таймерах STM32.
- Вызывается прерывание CSSI, которое в STM32 связано с немаскируемым прерыванием NMI ядра Cortex-M — см. таблицу исключений в статье о Cortex-M3.
В обработчике NMI программа обязана сбросить флаг, записав 1 в бит CSSC регистра RCC_CIR. Если этого не сделать, NMI будет вызываться бесконечно, и основная программа больше не получит управления.
Зачем это нужно
Без CSS отказ кварца означает остановку ядра: программа замирает в том состоянии, в каком была, и сторожевой таймер IWDG — единственное, что может её перезапустить, ведь он работает от отдельного LSI. С CSS программа продолжает работать на HSI с худшей точностью частоты и может сама решить, что делать: выключить силовые выходы, сообщить об ошибке, попытаться перезапустить HSE. Для приводов и преобразователей важен и аппаратный сигнал на вход break TIM1 и TIM8: выходы отключаются без участия программы.
Если кварц не запускается вовсе, CSS не поможет — детектор включается только после того, как HSE стал готов. Причины такого незапуска разобраны в ответе «Почему STM32 не запускается от внешнего кварца».
Не путать с детектором пониженного питания и PVD: те следят за напряжением питания, а CSS — только за наличием тактового сигнала HSE.
Частые вопросы
Как включить CSS в STM32?
Установить бит CSSON в регистре RCC_CR. Детектор начнёт работать, когда HSE запустится, и выключится, если HSE остановят. Ещё нужен обработчик NMI: в нём программа должна записать 1 в бит CSSC регистра RCC_CIR, иначе NMI будет вызываться снова и снова.
На какой частоте работает STM32 после срабатывания CSS?
На внутреннем HSI: у STM32F103 это 8 МГц, у STM32F407 — 16 МГц. PLL, если он брал сигнал от HSE, выключается. Все делители частоты UART, таймеров и АЦП, рассчитанные на прежнюю частоту, становятся неверными, поэтому обработчик обычно переводит устройство в безопасное состояние или заново настраивает тактирование.
Следит ли CSS за часовым кварцем?
У STM32F1 и STM32F4 — нет: по RM0008 и RM0090 система контроля тактирования наблюдает только за HSE. Отказ часового кварца LSE она не обнаружит, и часы реального времени при этом просто остановятся.
Источники
- STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx — разд. 7.2.7: CSS включается программно, детектор работает после запуска HSE и выключается при остановке HSE; при отказе HSE выключается, событие уходит на вход break таймеров TIM1 и TIM8, прерывание CSSI связано с NMI; NMI повторяется, пока не сброшен флаг битом CSSC в RCC_CIR; если HSE был источником SYSCLK напрямую или через PLL — переход на HSI, PLL тоже выключается; разд. 7.3.1: бит CSSON в RCC_CR
- STMicroelectronics. RM0090 Rev 21 (June 2024). Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — разд. 7.2.7 (F405/407) и 6.2.7 (F42x/43x): то же поведение CSS — выключение HSE, break TIM1 и TIM8, NMI, сброс флага CSSC в NMI; при отказе выключается и PLLI2S, если он был включён
Нашли ошибку?
Смотрите также
- HSE, HSI, LSE и LSIЧетыре тактовых генератора STM32: какой для чего
- Почему STM32 не запускается от внешнего кварца?Генератор HSE не раскачивается: запас усиления, конденсаторы, частота
- Таймеры STM32Тактирование, PSC/ARR, ШИМ, мёртвое время, захват, энкодер, OPM, синхронизация
- Cortex-M3Регистры, карта памяти, bit-banding, NVIC, SysTick, MPU, старт, пример