Программирование ARM STM32F407: инструментарий для конфигурирования тактовых частот Wed, November 06 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


STM32F407: инструментарий для конфигурирования тактовых частот Печать
Добавил(а) microsin   

Микроконтроллеры STM32F407 имеют весьма непростое внутреннее устройство систем тактирования, требующее внимательного изучения. Здесь приведен перевод аптноута AN3988 "Clock configuration tool for STM32F40xx/41xx/427x/437x microcontrollers" компании ST.

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

Этот апноут представляет описание инструмента конфигурирования системной тактовой частоты (STSW-STM32091) для семейства микроконтроллеров STM32F4xx. Назначение этого инструмента - помочь пользователю в конфигурировании тактовых частот микроконтроллера, учитывая параметры продукта, такие как питание и режим доступа к FLASH. Инструмент реализован в файле STM32F4xx_Clock_Configuration_VX.Y.Z.xls, который предоставляется вместе с этим апноутом [1], который также может быть загружен с сайта www.st.com.

Примечание: VX.Y.Z означает номер версии, например V1.0.0.

Для STM32F4xx поддерживается следующая функциональность:

• Конфигурирование системной частоты (system clock), источника тактов HCLK и выходная частота.
• Конфигурирование быстродействия FLASH (latency), т. е. количество тактов ожидания (wait states) в зависимости от частоты HCLK.
• Установка частот PCLK1, PCLK2, TIMCLK (частоты таймера), USBCLK и I2SCLK.
• Генерирование готового к использованию модуля кода system_stm32f4xx.c, который содержит в себе все вышеперечисленные установки (системный исходный файл слоя доступа к периферии, STM32F4xx CMSIS Cortex-M4 Device Peripheral Access Layer).

В этом документе файл STM32F4xx_Clock_Configuration_VX.Y.Z.xls упоминается как "clock tool". Перед тем, как использовать clock tool, необходимо прочитать справочное руководство по микроконтроллеру STM32F4xx (RM0090) [1]. Этот апноут не заменяет руководство RM0090.

Прим. переводчика: ИМХО лучше сделать с точностью до наоборот, потому что сразу окунаться в даташит RM0090 слишком сложно. Лучше обращаться к RM0090 при необходимости.

[Требования к программному обеспечению]

Чтобы запустить clock tool, используйте свежие версии операционной системы Windows, такие как Windows XP, Vista или Windows 7. Компьютер при этом должен иметь объем памяти не менее 256 мегабайт RAM. У Вас должен быть установлен Microsoft® Office, разрешено использование макросов и контролы ActiveX. Также убедитесь, что Вы загрузили последнюю версию инструмента clock tool с сайта www.st.com.

Версии Excel® 1997-2003, как разрешить макросы и ActiveX: выберите меню Tools -> Macro -> Security -> Low (not recommended).

Примечание: если контролы ActiveX не разрешены, то будет отображено предупреждающее сообщение о том, что Вы разрешаете ActiveX. В этом случае следует ответить OK, чтобы разрешить ActiveX.

Версии Excel® 2007, как разрешить макросы и ActiveX: кликните на кнопку Microsoft Office -> Excel options -> Trust Center -> Trust center settings -> Macro settings -> выберите Enable all macros (not recommended, potentially dangerous code can run). Затем Trust Center -> Trust center settings -> ActiveX settings -> выберите Enable all controls without restrictions and without prompting (not recommended; potentiality dangerous controls can run). Кликните OK.

Примечание: за дополнительной информацией, как разрешить макросы и ActiveX controls, обратитесь на сайт Microsoft Office.

[Схема тактирования микроконтроллеров STM32F4xx]

Инструмент clock tool специально разработан для генерирования модуля кода system_stm32f4xx.c, который предназначен для конфигурирования системных тактовых частот микроконтроллеров семейства STM32F4xx. Файл модуля system_stm32f4xx.c предоставляется как шаблон для конфигурирования системной тактовой частоты, который можно легко подстроить для выбора нужной тактовой частоты системы и конфигурирования нужной латентности Flash.

В этой секции описывается схема системной частоты, которая зависит от требований к напряжению питания (VDD) против значения системной тактовой частоты и латентности Flash против значения системной тактовой частоты. Можно использовать три разные источника тактовой частоты, чтобы получить системные такты (SYSCLK):

1. Такты генератора HSI (16 МГц).
2. Такты генератора HSE (4..26 МГц).
3. Основная петля ФАПЧ (phase-locked loop, PLL) для получения тактов, с генератором, управляемым напряжением в петле PLL (PLLVCO). Входная частота системы PLL должна быть между 1 и 2 МГц (рекомендуется использовать 2 МГц, чтобы ограничить джиттер PLL). В PLL участвуют коэффициенты умножения и деления M, N, P и Q.

Все тактовые частоты для периферийных устройств микроконтроллера производятся от частоты SYSCLK, за исключением:

1. Тактовые частоты USB OTG FS clock (48 МГц), RNG (48 МГц) и SDIO (48 МГц), которая приходит от специального выхода PLL (PLL48CLK).
2. Тактовая частота I2S. Чтобы достичь высокого качества звука, такты I2S могут быть получены либо от отдельного узла PLL (PLLI2S), либо от внешней тактовой частоты, которая подключена к ножке I2S_CKIN.

AN3988-clock-scheme

Рис. 1. Схема тактирования STM32F4xx.

Примечания к схеме (см. также Словарик [2]):

Ethernet PTP clock тактовая частота Precision time protocol для Ethernet.
HSE_RTC тактовая частота RTC (HSE, поделенная на коэффициент программируемого делителя).
independent watchdog независимый сторожевой таймер.
LSE OSC Low Speed External, внешний низкоскоростной RC-генератор 32.768 кГц (к которому подключается отдельный низкочастотный кварцевый резонатор).
LSI RC Low Speed Internal, внутренний низкоскоростной RC-генератор 32 кГц.
MCO1, MCO2 Microcontroller clock output, выходы тактов 1 и 2.
OSC_OUT, OSC_IN выводы для подключения высокочастотного кварцевого резонатора (4..26 МГц).
Watchdog enable разрешение сторожевого таймера.

Примечание: количество тактов ожидания FLASH (wait states, определяющее латентность) задается в соответствии с частотой CPU (Cortex-M4), и не напрямую в соответствии с напряжением питания (VDD), см. таблицу 2.

Таблица 2. Количество циклов wait states в зависимости от тактовой частоты CPU HCLK, частота HCLK указана в МГц.

Wait states WS (LATENCY) VDD 2.7V .. 3.6V VDD 2.4V .. 2.7V VDD 2.1V .. 2.4V VDD 1.8V .. 2.1V
Prefetch OFF
0 WS (1 CPU cycle) 0 < HCLK ≤ 30 0 < HCLK ≤ 24 0 < HCLK ≤ 22 0 < HCLK ≤ 20
1 WS (2 CPU cycles) 30 < HCLK ≤ 60 24 < HCLK ≤ 48 22 < HCLK ≤ 44 20 < HCLK ≤ 40
2 WS (3 CPU cycles) 60 < HCLK ≤ 90 48 < HCLK ≤ 72 44 < HCLK ≤ 66 40 < HCLK ≤ 60
3 WS (4 CPU cycles) 90 < HCLK ≤ 120 72 < HCLK ≤ 96 66 < HCLK ≤ 88 60 < HCLK ≤ 80
4 WS (5 CPU cycles) 120 < HCLK ≤ 150 96 < HCLK ≤ 120 88 < HCLK ≤ 110 80 < HCLK ≤ 100
5 WS (6 CPU cycles) 150 < HCLK ≤ 168 120 < HCLK ≤ 144 110 < HCLK ≤ 132 100 < HCLK ≤ 120
6 WS (7 CPU cycles)   144 < HCLK ≤ 168 132 < HCLK ≤ 154 120 < HCLK ≤ 140
7 WS (8 CPU cycles)     154 < HCLK ≤ 168 140 < HCLK ≤ 160

[Генератор тактов I2S]

Генерация тактов для интерфейса I2S зависит от наличия частоты MCLK (разрешена она или запрещена), ширины фрейма, и от периферийной частоты I2S (I2SCLK).

AN3988-I2S-clock-generator-architecture

Рис. 2. Архитектура генератора тактов I2S.

Частота аудиовыборок может быть 192 кГц, 96 кГц, 48 кГц, 44.1 кГц, 32 кГц, 22.05 кГц, 16 кГц, 11.025 кГц или 8 кГц. Чтобы достичь нужной частоты, линейный делитель (DIV) должен быть запрограммирован по формулам ниже.

Когда генерируется MCLK (установлен бит MCKOE в регистре SPI_I2SPR):
• Fs = I2SxCLK/[(16*2)*((2*I2SDIV)+ODD)*8)] когда фрейм канала шириной 16 бит.
• Fs = I2SxCLK/[(32*2)*((2*I2SDIV)+ODD)*4)] когда фрейм канала шириной 32 бит.

ODD является множителем нечетности для прескалера. Когда MCLK запрещена (очищен бит MCKOE):
• FS = I2SxCLK/[(16*2)*((2*I2SDIV)+ODD))] когда фрейм канала шириной 16 бит.
• FS = I2SxCLK/[(32*2)*((2*I2SDIV)+ODD))] когда фрейм канала шириной 32 бит.

Инструмент clock tool выполняет наилучшее конфигурирование PLLI2S_N и PLLI2S_R с минимумом ошибок для частоты выборок и соответствия параметрам I2S (ширина фрейма, MCKO, sampling frequency).

Примечание: файлом system_stm32f4xx.c конфигурируются только PLLI2S_N и PLLI2S_R, регистр I2S не конфигурируется. Ошибка частоты выборок (sampling frequency) вычисляется как индикатор соответствия параметрам I2S, которые не сконфигурированы в выходном файле system_stm32f4xx.c.

Имеется два режима работы clock tool: Wizard и Expert, режим выбирается в лист-боксе Configuration mode.

[Режим Wizard (мастер подсказок)]

Этот режим (активный по умолчанию) проводит Вас через последовательные шаги настройки для простого и быстрого получения нужной системной конфигурации тактовых частот.

AN3988-Wizard-mode

Рис. 3. Интерфейс пользователя в режиме Wizard.

Примечание: кнопка View разрешает просмотр xls-файла в полный экран (этот просмотр активируется или деактивируется). Кнопка Reset разрешает установку конфигурации по умолчанию для системной тактовой частоты.

Далее будет описан пошаговый процесс получения конфигурации в режиме Wizard.

1. Когда в Вашем приложении используется HSE (высокоскоростной внешний генератор), установите его частоту в диапазоне 4..26 МГц, если для STM32F4xx используется кварцевый резонатор.

Примечание: макроопределение HSE_VALUE в файле stm32f4xx.h должно быть модифицировано всякий раз, когда пользователь меняет значение генератора HSE.

Если введенная частота не находится в допустимых пределах, то будет отображено сообщение об ошибке, как это показано на рис. 4.

AN3988-HSE-value-out-of-range

Рис. 4. Значение частоты HSE вне допустимого диапазона.

2. Ведите значение напряжения питания VDD в диапазоне от 1.8V до 3.6V (см. рис. 3). Если напряжение VDD выходит за эти пределы, то будет отображена ошибка, как это показано на рис. 5.

AN3988-VDD-out-of-range

Рис. 5. Значение VDD вне допустимого диапазона.

3. Сконфигурируйте выходное напряжение главного регулятора:
– Выберите Scale1 mode из лист-бокса, чтобы получить максимальную тактовую частоту системы (fHCLK) 168 МГц.
– Выберите Scale2 для получения максимальной тактовой частоты (fHCLK) 144 МГц.

4. Сконфигурируйте буфер Prefetch (предварительная загрузка команд), Instruction Cash (кэширование команд) и Data cash (кэш данных) - выберите ON или OFF из лист-бокса.

5. Выберите PLLI2S, если это необходимо. Если нужно, разрешите это и следуйте шагам 9, 10, 11 и 12. Иначе перейдите к шагу 5.

6. Укажите, если 48 МГц нужны для функционирования USB OTG FS, RNG или SDIO. Если эти функции необходимы, это добавляет ограничения для параметров, устанавливающих конфигурацию PLL. Если эти функции не нужны, то не будут добавлены ограничения USB.

7. Установите нужную частоту HCLK. Максимальная частота HCLK зависит как от выходного напряжения главного регулятора (Scale1/Scale2, установленный на шаге 4), так и от напряжения VDD (см. таблицу 2). Если введенное значение больше максимальной частоты HCLK, то будет отображено сообщение об ошибке, как это показано на рис. 6.

AN3988-HCLK-error-message

Рис. 6. Ошибка частоты CLK.

8. Выберите настройки прескалера PCLK1 и PCLK2 из лист-бокса, чтобы получить требуемые частоты PCLK1 и PCLK2. Частоты TIMCLK конфигурируются автоматически в зависимости от установок прескалера PCLK1 и PCLK2.

9. Просмотрите настройки, сделанные на шаге 8.

10. Выберите источник тактов I2S. Игнорируйте шаги 10, 11 и 12, если выбраны внешние такты для I2S.

11. Если PLLI2S выбран в качестве источника тактов для I2S, выберите ширину фрейма (16 или 32 бита).

12. Укажите, должна ли быть разрешена главная тактовая частота (master clock, MCLK), для чего выберите ON или OFF в лист-боксе.

13. Выберите Fs из лист-бокса. Значение Fs может быть 192 кГц, 96 кГц, 48 кГц, 44.1 кГц, 32 кГц, 22.05 кГц, 16 кГц, 11.025 кГц и 8 кГц.

14. Кликните на кнопке RUN.

Если потребуется сделать выбор из нескольких возможных источников тактирования, то для этого отобразится окно (см. рис. 7). Выберите HSE, HSI или PLL (источником для PLL может быть HSI или HSE).

AN3988-select-clock-source

Рис. 7. Выбор источника тактирования.

Примечание: когда разрешены функции USB и/или I2S (в clock tool установлен соответствующий чекбокс) и выбранная частота HCLK не является допустимой, то в окне отобразится сообщение о ближайшей возможной для использования частоте HCLK (см. рис. 8).

AN3988-no-possible-configuration-error

Рис. 8. Сообщение о том, что нельзя установить требуемую частоту HCLK.

Сконфигурируйте Flash Latency (латентность, время доступа к FLASH): после запуска приложения количество wait states автоматически сконфигурируется на лучшее значение (наименьшее возможное), которое Вы можете изменить на любое другое значение в сторону увеличения.

Нажатие кнопки RUN отобразит полосу прогресса выполнения операции.

15. На завершающем шаге кликните на кнопке Generate, чтобы автоматически сгенерировать файл system_stm32f4xx.c. Этот файл сгенерируется в том же месте на диске, где находится XLS-файл clock tool. Просмотрите сгенерированный файл, чтобы проверить значение system clock, SystemCoreClock, значения HCLK, PCLK1, PCLK2, Flash access mode и другие параметры, определенные в функции SetSysClock.

Файл system_stm32f4xx.c должен быть добавлен к рабочему проекту для совместной сборки. Если файл не был сгенерирован, то будет отображено сообщение об ошибке, как это показано на рис. 9.

AN3988-File-generation-error

Рис. 9. Ошибка генерации файла.

[Режим Expert]

В этом режиме предоставлено больше гибкости для настройки конфигурации, однако корректность введенной конфигурации зависит от того, насколько правильно её составил пользователь.

AN3988-Expert-mode

Рис. 10. Интерфейс пользователя в режиме эксперта.

Примечание: кнопка View разрешает просмотр xls-файла в полный экран (этот просмотр активируется или деактивируется). Кнопка Reset разрешает установку конфигурации по умолчанию для системной тактовой частоты.

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

1. Сконфигурируйте частоту SYSCLK следующим образом:

a) Если в Вашем приложении используется HSE, то задайте значение частоты кварцевого генератора в диапазоне 4..26 МГц.

Примечание: макроопределение HSE_VALUE в файле stm32f4xx.h должно быть модифицировано всякий раз, когда пользователь меняет значение генератора HSE.

Если введенная частота не находится в допустимых пределах, то будет отображено сообщение об ошибке, как это показано на рис. 4.

b) Введите напряжение питания VDD в диапазоне от 1.8V до 3.6V (см. рис. 10).

c) Сконфигурируйте выходное напряжение главного регулятора:
– Выберите Scale1 mode из лист-бокса, чтобы получить максимальную тактовую частоту системы (fHCLK) 168 МГц.
– Выберите Scale2 для получения максимальной тактовой частоты (fHCLK) 144 МГц.

d) Сконфигурируйте источник SYSCLK (PLL, HSE или HSI). Если выбор источника тактов неверен (частота HCLK слишком большая) то отобразится сообщение об ошибке, как это показано на рис. 11.

AN3988-system-clock-frequency-is-exceeded

Рис. 11. Превышено максимальное значение системной тактовой частоты.

e) Если в качестве источника SYSCLK выбрана PLL, то нужно выбрать источник тактов для PLL (HSE или HSI).

f) Если в качестве источника SYSCLK выбрана PLL, то сконфигурируйте главный коэффициент деления PLL(M), чтобы достичь частоты PLLVCO между 0.95 и 2.1 МГц (за подробностями обратитесь к разделу "PLL characteristics" даташита STM32F4xx. Если выбранный коэффициент деления недопустим, то отобразится сообщение об ошибке. Если частота I2S выше 192 МГц, то отобразится сообщение об ошибке, как это показано на рис. 12.

AN3988-I2S-frequency-out-of-range

Рис. 12. Частота I2S вне допустимого диапазона.

g) Установите прескалер HCLK, используя лист-бокс AHBPrescaler, чтобы получить желаемую частоту HCLK.

h) Выберите настройки прескалера PCLK1 из лист-бокса, чтобы получить желаемую частоту PCLK1. Частоты TIMCLK конфигурируются автоматически в зависимости от установки прескалера PCLK1.

i) Выберите настройки прескалера PCLK2 из лист-бокса, чтобы получить желаемую частоту PCLK2. Частоты TIMCLK конфигурируются автоматически в зависимости от установки прескалера PCLK2.

j) Сконфигурируйте латентность Flash: после установки прескалера HCLK будет автоматически сконфигурировано количество Flash wait states на самое лучшее, минимальное значение. Вы можете изменить это значение на любое в сторону увеличения.

k) Сгенерируйте файлы конфигурации, нажав на кнопку Generate.

2. Сконфигурируйте частоту I2S следующим образом:

a) Если нужно использовать PLLI2S, разрешите это и следуйте шагам ниже.

b) Если выбран внешний источник тактирования I2S, то следующие шаги можно проигнорировать.

c) Если выбрано PLLI2S в качестве источника тактов для I2S, сконфигурируйте коэффициент множителя PLLI2S(N).

d) Если выбрано PLLI2S в качестве источника тактов для I2S, сконфигурируйте коэффициент делителя PLLI2S(R).

e) Если выбрано PLLI2S в качестве источника тактов для I2S, выберите ширину фрейма (16 или 32 бита) и укажите, разрешена или нет главная тактовая частота MCLK.

f) Выберите Fs из лист-бокса. Значение Fs может быть 192 кГц, 96 кГц, 48 кГц, 44.1 кГц, 32 кГц, 22.05 кГц, 16 кГц, 11.025 кГц и 8 кГц.

3. Сконфигурируйте такты узлов USB OTG FS, RNG или SDIO. Выберите коэффициент деления PLL(Q) для USB OTG FS, SDIO и RNG.

4. Дополнительное необязательное конфигурирование. Сконфигурируйте буфер Prefetch (предварительная загрузка команд), Instruction Cash (кэширование команд) и Data cash (кэш данных).

5. Сгенерируйте файл system_stm32f4xx.c, щелкнув на кнопку Generate. Этот файл сгенерируется в том же месте на диске, где находится XLS-файл clock tool. Просмотрите сгенерированный файл, чтобы проверить значение system clock, SystemCoreClock, значения HCLK, PCLK1, PCLK2, Flash access mode и другие параметры, определенные в функции SetSysClock. Добавьте файл system_stm32f4xx.c в свой проект.

[Известные ограничения clock tool]

Этот инструментарий не поддерживает конфигурации, которые используют внешний источник тактов HSE (HSE bypass).

[Ссылки]

1140808STM32F407.zip - документация по микроконтроллерам STM32F40x/41x, по плате Olimex STM32-P407, схема, примеры кода.
2STM32: аббревиатуры и термины.

 

Комментарии  

 
0 #2 Сергей 17.04.2021 16:24
Познавательно и доступно. Благодарю Вас.
Цитировать
 
 
0 #1 Nick 26.08.2016 18:50
Огромнейшее ВАМ спасибо за эти статьи!!!!
Цитировать
 

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


Защитный код
Обновить

Top of Page