Система сброса

В этом разделе мы рассмотрим вторую часть Системы Сброса и Тактирования RCC - Система Сброса.

Как всегда создадим директорию для проектов:

nis@jane ~/stm32/f4examples $ mkdir 08-reset

nis@jane ~/stm32/f4examples $ cd 08-reset/

Также создадим базовый проект для дальнейших действий:

nis@jane ~/stm32/f4examples/08-reset $ cp -a ../07-clocks/00-base/ .

Сброс

Существует 3 типа сброса - системный сброс, сброс по питанию и сброс системы резервирования.

Системный сброс

Системный сброс устанавливает значение всех регистров до значение после сброса, также устанавливает флаги сброса в регистре управления тактирование CSR а также регистры в резервном домене.

Системный сброс генерируется когда происходит одно из следующих событий:

  1. Низким логическим уровнем на линии NRST (внешний сброс)
  2. Оконный сторожевой таймер (window watchdog) - окончание отсчета (WWDG сброс)
  3. Независимый сторожевой таймер (independent watchdog) - окончание отсчета (IWDG сброс)
  4. Программный сброс (SW сброс)
  5. Сброс системы управления низким энергопотреблением (Low-power management сброс)

Программный сброс

Сброс можно идентифицировать проверяя флаги сброса в RCC регистре управления и статуса (RCC_CSR).

Устанавливая SYSRESETREQ бит в регистре управления прерываниями и сбросом процессорного ядра мы вызываем программный сброс. Для более подробной информации читайте Cortex-M4F техническое руководство.

Сброс системы управления низким потреблением

Существует 2 пути генерации сброса системы управления низким энергопотреблением:

  1. Сброс генерируется при входе в Режим Ожидания:
    1. Этот тип сброса включается при сбросе nRST_STDBY бита в регистре. При этом выборе этого режима, осуществляется вход в Режим Ожидания, в случае удачного исполнения устройство по сбросу входит в режим в режим Ожидания.
  2. Сброс при входе в Режим Остановки:
    1. Этот тип сброса выключается при сбросе nRST_STOP бита в регистре. Вход в сам Режим Остановки аналогичен Режиму Ожидания.

Для более подробной информации, вы можете почитать руководство по программированию флеш-памяти для STM32F40x и STM32F41x мк.

Сброс по питанию

Сброс по питанию генерируется когда одно из событий происходит:

  1. при включение/выключение питания (POR/PDR сброс) или при просадке напряжения (BOR).
  2. по выходу из Режима Ожидания

Сброс по питанию устанавливает до значения по умолчанию значения всех регистров за исключением регистров резервного домена.

После события сброса при низком уровне на NRST линии, этот уровень остается некоторое время благодаря системе задержки. Также сервис RESET переправляет исполнение на вектор сброса находящийся по адресу 0x0000 0004 в карте памяти (первый вектор после указателя на начало стека в таблице векторов).

Схема генерации сброса

Как видно из схемы после пришествия низкого уровня на линии сброса генератор импульса гарантирует задержку в течении как минимум 20 мкс для любого типа сброса. В случае внешнего сброса импульс генерируется при низком уровне на линии внешнего сброса.

Резервный домен имеет два специфичных сброса которые воздействуют только на него.

Сброс резервного домена

Сброс резервного домена устанавливает все регистры часов реального времени в значение по умолчанию. Для резервной памяти BKPSRAM этот сброс не оказывает влияния. Для сброса этой памяти необходимо изменить уровень защиты от записи с 1 в 0.

Этот сброс генерируется при следующих событиях:

  1. Программный сброс установкой бита BDRST в регистре управления резервным доменом RCC_BDCR.
  2. Включением одного из напряжений Vdd или Vbat, если до этого они были выключенны.

В качестве примера для начала рассмотрим аппаратный сброс.

Для продолжение добавим обнаружение и обработку программного сброса.