Сен 122012
 

При создании нового проекта к нему подключается файл system_stm32l1xx.c, функции которого выполняют начальную инициализацию системы тактирования микроконтроллера STM32. Системная тактовая частота SYSCLK и тактовые частоты периферии (AHB, APB1, APB2, таймеров…) после выполнения начальной инициализации будут иметь строго определенные значения, и разработчику для изменения тактовых частот и их источников потребуется делать это в коде своего приложения, либо файл system_stm32l1xx.c заранее корректировать. С сайта ST Microelectronics можно загрузить небольшую утилиту, позволяющую в визуальном режиме выполнить настройки системы тактирования. Все это выполнено в формате Excel, а на выходе генерируется готовый файл system_stm32l1xx.c, но уже с теми значениями тактовых частот и выбором источников тактирования, которые необходимы в проекте. Остается подключить этот файл к проекту при его создании, тогда нужные настройки будут произведены на этапе начальной инициализации, освобождая разработчика от необходимости делать это в дальнейшем.

Кроме серии STM32L на сайте производителя есть такие же утилиты для семейств STM32F0, STM32F2, STM32F4. Нет только для популярной серии STM32F10x, видимо, потому что она уже довольно обширна и содержит устройства, значительно отличающиеся по внутренней структуре периферии и максимальным рабочим частотам.

Загрузить утилиту можно по ссылке STM32L_System Clock Configuration

В архиве, кроме самой утилиты, находится оригинальное описание процедуры работы с программой “AN3309 — Clock configuration tool for STM32L microcontrollers”.

Честно сказать, я уже давно мельком взглянул на эту утилиту, и представлял ее в качестве небольшой визуальной помощи по системе тактирования для изучения ее структуры. Но когда разглядел возможность создания файла начальной инициализации с заданными настройками, решил присмотреться внимательней. И обнаружил, что кроме того здесь еще заложен контроль корректности выбора максимальных рабочих частот в зависимости от таких параметров, как внешнее напряжение питания микроконтроллера и напряжение питания непосредственно ядра микроконтроллера. Также, для работы на максимальной частоте тактирования требуется произвести некоторые настройки флэш-памяти микроконтроллера, иначе чтение и выполнение программного кода становится невозможным (а, соответственно, и отладка тоже). Все это здесь учтено и, в случае выбора пользователем таких «конфликтных» значений, программа сразу выдаст предупреждение.

Для работы программы необходимо разрешить использование макросов в Excel. После запуска программы предлагается выбрать тип используемого микроконтроллера.

Выбор устройства

Далее открывается следующее окно, в котором мы видим схему тактирования микроконтроллера.

Внешний вид программы

Рассмотрим подробней этот рисунок. В левом нижнем углу имеются следующие элементы

Режим конфигурации

  • Configuration mode -  здесь можно выбрать один из двух режимов: Wizard или Expert. Режим Wizard вы видите на рисунке выше, в этом режиме действия пользователя ограничены. Ввод значений возможен только в активных элементах, все остальные действия по конфигурации программа берет на себя. Режим Expert позволяет пользователю управлять всеми источниками тактирования, множителями и делителями, выбирать напряжение питания ядра и т.д. Режим предназначен для более “тонкой” настройки системы тактирования.
  • Vdd – напряжение питания микроконтроллера
  • Vcore – напряжение питания ядра микроконтроллера.
  • Flash Latency – количество тактов задержки при чтении флэш-памяти. Параметр может принимать два значения: 0 или 1. При нулевом значении максимальная системная тактовая частота для данного типа микроконтроллера ограничена значением 16 МГц, при больших значениях частоты микроконтроллер просто “зависнет”. Выбор “1” для этого параметра устанавливает бит  Latency в регистре FLASH_ACR, что вводит дополнительное время ожидания доступа к флэш-памяти, равное одному периоду тактовой частоты, а также устанавливает режим чтения 64-разрядных слов, что позволяет работать на максимальной частоте 32 МГц. В зависимости от параметра Flash Latency и напряжений питания ядра и самого микроконтроллера выделяется 3 различных режима работы, с различными максимальными тактовыми частотами, а соответственно, скоростью работы периферии и энергопотреблением.

Flash Latency

  • Require 48MHz for USB Clock – установка этого переключателя задает формирование тактовой частоты для модуля USB. Эта частота формируется делением на 2 частоты источника PLL (96 МГц), соответственно при установке данного переключателя в режиме Wizard автоматически будет произведена настройка PLL с выбором соответствующего входного источника.

Источники тактирования

В этой части изображены все возможные источники для формирования тактовой частоты. В режиме Wizard пользователь может изменить только значение частоты внешнего генератора HSE, которое по умолчанию задано величиной 8 МГц.

HCLK

В поле HCLK необходимо ввести значение тактовой частоты шины AHB. Далее программа может пересчитать значение SYSCLK, коэффициента деления AHB Prescaler и, если потребуется, выберет другой источник тактирования или задействует PLL, в зависимости от значения частоты шины AHB, введенного пользователем.

APB Prescaler

Далее можно настроить тактовые частоты шин APB1, APB2 выбором коэффициентов деления в полях APB1(2) Prescaler. При этом коэффициенты деления частоты для таймеров также могут быть автоматически изменены программой в зависимости от выбранных частот шин APB1, APB2.

После ввода всех необходимых значений можно перейти окончательной части, для этого рассмотрим элементы, расположенные в нижней части утилиты

Run_Generate

  • Run -  запуск формирования настроек конфигурации в зависимости от введенных пользователем значений. Далее пользователю может быть предложен выбор напряжения питания ядра и источника тактирования. А может и нет – все зависит от введенных параметров. После нажатия этой кнопки, может быть автоматически выбран другой источник тактовой частоты, изменены настройки PLL и т.д.

 

Select voltage range

Select the system clock source

  • Generate – при нажатии этой кнопки генерируется новый файл начальной инициализации system_stm32l1xx.c.
  • Reset – сбрасывает введенные пользователем настройки.
  •  Home – возвращает на начальный этап выбора микроконтроллера.

К примеру, если мы хотим сформировать тактовую частоту 48 МГц для модуля USB и установим флажок в переключателе Require 48MHz for USB Clock, то после нажатия кнопки Run, сразу же получим предупреждение об ошибке:

HCLK_USBCLK

Частота шины AHB в данном случае не может быть менее 10 МГц. Изменим значение в поле HCLK на 16000 и снова нажмем  Run. На рисунке ниже можно наблюдать изменения, которые произошли при этом в системе тактирования. Во-первых, теперь задействован PLL, формирующий частоту 96 МГц, из которой далее получается 48 МГц для модуля USB. Во-вторых, для формирования такой частоты PLL выбран уже другой источник – внешний генератор HSE с частотой 8 МГц, поскольку частота источника MSI для этой цели уже мала.

HCLK_USBCLK_new config

Далее, нажатием кнопки Generate, можно запускать генерацию файла system_stm32l1xx.c с новыми настройками системы тактирования, а затем подключать этот файл к проекту.

В режиме Expert пользователю предоставляется больше возможностей для настройки.

Режим Expert

О структуре системы формирования тактовых частот можно почитать ЗДЕСЬ. В данном режиме возможно множество различных вариаций параметров, и при некорректном сочетании каких-либо из них программа также отследит это и выдаст предупреждающее сообщение, например такое:

Сообщение программы об ошибке

В документации к программе указаны следующие ограничения:

  • Не поддерживается конфигурация при использовании внешнего источника HSE. Об этом пока подробней прояснить не могу, возможно здесь имеется в виду режим Bypass при использовании внешнего источника тактовых импульсов, а не внешнего кварцевого резонатора с источником HSE. Пока не проверил – на плате STM32L-DISCOVERY внешний кварц не запаян. Если найду время, то проверю этот нюанс.
  • Не поддерживаются дробные значения частоты генератора HSE.

От себя еще отмечу необходимость правильности инициализации при использовании внутреннего генератора MSI, поскольку значения его частот в программе также округлены. К примеру, вместо частоты 2097 кГц в программе прописано значение 2000 кГц. Этот момент тоже надо будет уточнить.

Также, при конфигурации с помощью этой утилиты необходимо помнить об ограничениях частоты тактирования и выборок АЦП в зависимости от напряжения питания ядра микроконтроллера. Более детально с этими зависимостями можно ознакомиться в Reference manual на данное семейство микроконтроллеров.

Другие статьи: