Настройка Systick для STM32

Вопрос или проблема

Хотя этот вопрос может показаться тривиальным, я не совсем понимаю результаты своей работы. Я следовал статьям по программированию на «bare metal» и пытался реализовать некоторые основные функции на своей плате Nucleo с STM32H723 без каких-либо внешних библиотек. Я понимаю большую часть, но в одной статье упоминалось, что мне нужно включить SysCfg, чтобы использовать Systick.

 static inline void systick_init(uint32_t ticks) {
  if ((ticks - 1) > 0xffffff) return;  // Таймер Systick - 24 бита
  SYSTICK->LOAD = ticks - 1;
  SYSTICK->VAL = 0;
  SYSTICK->CTRL = BIT(0) | BIT(1) | BIT(2);  // Включить Systick
  //RCC->APB4ENR |= BIT(1);                   // ПОЧЕМУ НЕ НУЖНО?
}

Что я наблюдаю, так это то, что мне не нужна последняя строка (закомментированная), в которой упоминается включение SysCfg. Я не трогаю этот регистр ни в какой другой части моего кода, и тем не менее прерывание продолжает работать. Я даже проверил файл startup.s, который Cube сгенерировал для меня, и все, что я там вижу, это инициализация вектора прерываний. Это связано с режимом энергопотребления? SysCfg по умолчанию отключен только в режиме низкого потребления?

Ответ или решение

Конфигурация Systick для STM32

Вопрос конфигурации Systick таймера на плате Nucleo с чипом STM32H723 может показаться незначительным, но понимание его работы очень важно для разработки bare metal приложений. Давайте внимательно разберем все аспекты, связанные с использованием Systick и необходимостью активации SysCfg.

Описание Systick

Systick таймер — это встроенный таймер, предоставляющий удобный способ генерации прерываний с заданным интервалом. Он часто используется для реализации функций, связанных с временными задержками и таймаутами, и легко интегрируется в различную проектную архитектуру.

Код инициализации Systick, который вы предоставили, выглядит следующим образом:

static inline void systick_init(uint32_t ticks) {
  if ((ticks - 1) > 0xffffff) return;  // Systick таймер 24-битный
  SYSTICK->LOAD = ticks - 1;
  SYSTICK->VAL = 0;
  SYSTICK->CTRL = BIT(0) | BIT(1) | BIT(2);  // Включаем Systick
  // RCC->APB4ENR |= BIT(1);                   // ЗАЧЕМ ЭТА СТРОКА НУЖНА?
}

Разбор кода

  1. Проверка значения ticks: Прежде всего, мы проверяем, чтобы значение ticks было допустимым для 24-битного таймера. Если значение превышает 24 бита, функция завершается.
  2. Инициализация регистра LOAD: Мы задаем значение, которое будет загружено в Systick на следующий переполнившийся таймер.
  3. Сброс значения VAL: Устанавливаем текущий таймер в ноль.
  4. Включение контроллера Systick: С помощью битов в CTRL настраиваем таймер на работу и активацию прерываний.

Вопрос о SysCfg

Вы задаетесь вопросом, почему вам не требуется включать SysCfg и как это связано с работой Systick. Давайте проясним следующие моменты:

  1. SysCfg и его необходимость: SysCfg отвечает за конфигурацию панели управления системой, включая различные параметры работы периферийных устройств и режимов низкого энергопотребления. Однако, если вам не нужно изменять конфигурацию, связанную с Systick, то SysCfg может оставаться выключенным, и таймер будет функционировать нормально.

  2. Работа прерываний: Если вы инициализируете вектор прерываний в вашем проекте (в том числе и в startup.s), то прерывания будут срабатывать без дополнительных активаций, поскольку они уже настроены на использование Systick.

  3. Состояние питания: Как вы правильно заметили, SysCfg может быть необходим для управления режимами низкого энергопотребления. Однако, для обычной работы с Systick в стандартных режимах это не требуется.

Заключение

Таким образом, вы можете успешно настроить Timert Systick в STM32H723 без необходимости включать SysCfg, если ваша программа не требует специальных условий или конфигураций. Если ваши прерывания работают, а таймер выполняет свою задачу, это свидетельствует о правильной настройке и отсутствии конфликтов в конфигурации.

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

Оцените материал
Добавить комментарий

Капча загружается...