Перейти к содержанию

Система контроля тактирования (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):

  1. Генератор HSE выключается.
  2. Если HSE был источником системной частоты — напрямую или через PLL, — SYSCLK переключается на HSI, а PLL выключается.
  3. Событие отказа подаётся на аварийный вход break таймера TIM1 (и TIM8 — у STM32F103 high- и XL-density и у STM32F4; у F103x8/xB его нет): их выходы ШИМ переходят в безопасное состояние, как описано в статье о таймерах STM32.
  4. Вызывается прерывание 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 она не обнаружит, и часы реального времени при этом просто остановятся.

Источники

  1. 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
  2. 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, если он был включён

Нашли ошибку?