STM32F4 Начнем программировать CubeMX!

Print Friendly, PDF & Email

STM32F4 Начнем программировать!

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

Наш Опыт программирования различных процессоров начиная с архитектуры х86, С51, AVR, Nios II, TigerShark, ну и конечно STM32, точно нам говорит, что на сегодня почти всё сравнялось, и у всех производителей почти один и тот же подход. Конкретно о подходах и программировании того или иного кристалла и его особенностей мы поговорим дальше, а сейчас просто рассмотрим этапы проектирования и реализации прошивок для микроконтроллеров, который почти одинаков, во многих видах микроконтроллерах с какими то малыми изменениями. Рассмотрим их

Оглавление

1. Этапы проектирование ПО для микроконтроллеров STM32. 2

2. Установка компилятора. 2

3. STM32CubeMX.. 3

3.1. Начинаем работать с STM32CubeMX.. 7

3.1.1. Структура STM32CubeF4_FirmWare. 8

3.1.2. Настройка системы в CubeMX.. 15

3.1.2.1. Окно Настройки кристалла. 17

3.1.2.2. Окно Схема тактирования МК.. 19

3.1.2.3. Окно Конфигурация Элементов МК.. 23

3.2. Программируем в Keil 24

3.2.1. Генерируем инициализационный код, наконец-то. 24

3.2.2. Начинаем программировать. 25

4. Ура мы запустили Keil HAL LED.. 27

5. Заключение. 29

6. Используемые материалы.. 29

1. Этапы проектирование ПО для микроконтроллеров STM32

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

Наш Опыт программирования различных процессоров начиная с архитектуры х86, С51, AVR, Nios II, TigerShark, ну и конечно STM32, точно нам говорит, что на сегодня почти всё сравнялось, и у всех производителей почти один и тот же подход. Конкретно о подходах и программировании того или иного кристалла и его особенностей мы поговорим дальше, а сейчас просто рассмотрим этапы проектирования и реализации прошивок для микроконтроллеров, который почти одинаков, во многих видах микроконтроллерах с какими то малыми изменениями. Рассмотрим их:

· Установка компилятора;

· Установка библиотек;

· Выбор языка разработки (ASM, C, C++);

· Выбор среды программы: либо это библиотеки, либо ОС.

o Библиотеки:

§ CMSIS, SPL, HAL;

o ОС :

§ CMSIS RTOS, μC/OS-II , FreeRTOS, Linux, Android и другие;

Теперь перейдем к компиляторам!

2. Установка компилятора

Самих компиляторов очень много под архитектуру ARM, вот основные и наиболее популярные :

· RealView Development Suite (ARM C/C++ Compiler)

· Keil MDK-ARM (ARM C/C++ Compiler)

· IAR Embedded Workbench for ARM (IAR C/C++ Compiler)

· MULTI IDE for ARM (Green Hills C/C++ Compiler)

· CooCox CoIDE (GCC Compiler)

Мы будем использовать Keil, потому что еще давно к нему привыкли J.

Наш проект мы будем компилировать, и запускать в версии Keil 5.17. Качаем его !

Ссылка — https://www.keil.com/download/product/.

Или какой нить не ниже 5.Х.

Установив переходим к установке системной вещи под названием CubeMX.

3. STM32CubeMX

Рис. 3.1 Обзор прицепов работы с CubeMX

STM32CubeMX – это генератор инициализационного кода для семейства STM32, позволяющий автоматически настроить всю периферию, для данного кристалла или сгенерировать инициализационный код для какого-нибудь отладочного набора.

STM32Cube является комплексным программным решением, комбинируя встроенное программное обеспечение элементов MCU на базе программного обеспечения STM32CubeMX. Встроенное программное обеспечение не только охватывает все микроконтроллеры STM32 с высокой переносимостью, драйверов низкого уровня, но поставляется с набором компоненты middleware уровня, такие как RTOS, USB, TCP / IP, файловая система или графика. STM32CubeMX помогает пользователю настроить STM32 MCU (распиновку, цепи тактирования и периферию) и программное обеспечение стеки. Она также может помочь оценить энергопотребление благодаря калькулятору расчета потребляемой мощности. В STM32Cube встроены библиотеки программного обеспечения и STM32CubeMX генератор кода / конфигуратор может быть использован независимо друг от друга, но их полный потенциал достигается когда они используются вместе; как только MCU настроен, Пользователь может генерировать инициализационный C код, основанный на произведённых настройках в STM32CubeMX.

Свои примеры мы будем показать на отладочной плате STM32F429I-DISCO.

Рис. 3.2. Вид отладочной платы STM32F429I-DISCO

Ссылка на страницу STM32CubeMX для всех семейств:

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242 **

Ссылка на страницу STM32CubeMX для семейства STM32F4 набор библиотек :

· http://www.st.com/web/en/catalog/tools/PF259243

Устанавливаем его и переходим к процессу создания и настройки проекта для STM32.

** — внизу ссылка на саму программу, а для установки соответствующих библиотек , надо выбрать, соответствующий набор, подходящей для выбранного семейства, мы будем вести изложение на примере семейства STM32F4.

3.1. Начинаем работать с STM32CubeMX

Общие принципы работы в STM32CubeMX — создаем проект, выбираем микроконтроллер и нам сразу же предлагается большая схема со всеми выводами выбранного нами контроллера. Нажимая на выводы и заходя в разнообразные меню, мы легко настраиваем как периферию, так и режимы работы каждого конкретного вывода. Сразу же очевидные плюсы — можно наглядно увидеть, какие выводы уже заняты, а какие еще свободны (в крупных проектах — более чем полезная фишка). Как все это работает мы еще увидим на примере, а пока обсудим в общих чертах )

Итак, мы выбрали все нужные нам выводы, ввели все настройки периферии (например, частоты тактирования, режимы работы таймеров….), и STM32CubeMx дает нам возможность сгенерировать соответствующий код. То есть в итоге мы получаем готовый проект, с уже прописанными настройками, с подключенными библиотеками и с готовой инициализацией всей выбранной периферии. Базой для всего этого являются библиотеки CMSIS и HAL. CMSIS мы уже давно знакомы, а вот вторая библиотека — это что-то новое. – Здесб надо дать ссылку на статью, где описывается CMSIS SPL HAL)

Библиотека STM32 HAL Driver пришла (пока еще не окончательно) на смену всем хорошо известной библиотеке Standard Peripheral Library (SPL). В принципе, и структура и функции этих библиотек очень схожи, но HAL более заточена под принцип «вызвал функцию и сразу заработало». Для тех, кому не особо хочется возиться с какими-то низкоуровневыми настройками периферии — то что надо ?Естественно, на данный момент библиотека еще «сыровата», есть некоторые недоработки, но с каждым новым релизом ситуация все лучше и лучше.

Перейдем к практике. И тут я решил остановить свой выбор на семействе STM32F4, хотя это не имеет особого значения, поскольку мы всего лишь хотим ознакомиться с функционалом и принципом работы STM32CubeMx. Итак ST предлагают нам во-первых, собственно, сам STM32CubeMx (в скачанном архиве будет .exe файл для установки программы), а также набор библиотек STM32Cube FirmWare F4. Несмотря на почти одинаковые названия архивов на сайте ST — это абсолютно разные вещи. CubeMx — готовый софт для конфигурирования периферии, Cube FW — набор множества библиотек.

3.1.1. Структура STM32CubeF4_FirmWare

И для начала рассмотрим, что же за библиотеки нам предлагаются. Распаковываем архив и начинаем ковырять:

Рис. 3.1.1.1. Структура папок STM32CubeF4_FirmWare

Рис. 3.1.1.2. Количество примеров для определённых отладочных плат

Рис. 3.1.1.3. Программные компоненты, реализованные в STM32CubeF4_FirmWare

Рис. 3.1.1.4. Программная архитектура STM32CubeF4_FirmWare

Архитектура имеет три уровня реализации, которые оисывают свой уровень обстракции:

· Level 0: Этот уровень делится на три подуровня:
• Пакет Поддержки Платформы (BSP): этот слой предлагает набор программных интерфейсов, связанных с аппаратными Компонентами на аппаратных платах (Аудиокодек, I / O расширитель, Сенсорный экран, SRAM драйвер, ЖК драйверы. и т.д …) и состоит из двух частей:

o Компонент: это драйвер, связанные с внешним устройством на плате, и не связан с STM32, драйвер компонент обеспечивает определенные интерфейсы к BSP внешнего компонента драйвера и могут быть перенесены на любую плату.

o BSP драйвер: он позволяет драйверу компонента должны быть связаны с конкретной плате и предоставляет набор удобных интерфейсов. Правило API именования BSP_FUNCT_Action (): напр. BSP LED_Init (), BSP LED_On ()

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

• Уровень Аппаратных Абстракций (HAL): этот слой предоставляет драйвер низкого уровня, и методы аппаратных интерфейсов, чтобы взаимодействовать с верхними слоями (приложения, библиотеки и стеки). Он обеспечивает общий, мульти экземпляр и функционально ориентированные интерфейсы, которые позволяют чтобы разгрузить реализацию пользовательского приложения, предоставляя готовые к использованию процессов. Для примера: для периферийных устройств связи (I2S, UART ) он обеспечивает интерфейсы позволяющие инициализации и настройки периферийного уровня, управлять передачей данных на основе опроса, прерываниями или DMA процессом и управлять ошибками связи с которые могут возникать во время коммуникация. HAL Драйверы API делятся на две категории :

o общие интерфейсы API, которые обеспечивают общие и определенные функции на всех сериях расширения API,

o STM32 который предусматривает конкретные и индивидуальные функции для конкретного семейства или определенной части семейства.

Основные примеры периферийного использования: этот слой содержит примеры основных операций в STM32F4 периферии используя только ресурсы HAL и BSP.

· Level 1: Этот уровень разделен на два подуровня:

• Компоненты промежуточного уровня(Middleware components:): набор библиотек, охватывающих USB Host и библиотеки устройств, STemWin, LibJPEG, FreeRTOS, FatFs, LwIP и PolarSSL. горизонтальное взаимодействие между компонентами этого слоя осуществляются непосредственно путем вызова API, функцию во время работы вертикальная взаимодействие с драйверами низкого уровня осуществляется с помощью специфических обратных вызовов и статические макросы реализованные в интерфейсе библиотеки системных вызовов. Например, FatFs Реализует дисковый ввод / вывод драйвер для доступа к диск MicroSD или USB Mass Storage Класс. Основные особенности каждого компонента промежуточного программного таковы:

o USB Host и Device Библиотеки :

— классы Несколько USB поддерживаются (запоминающих, HID, CDC, DFU, аудио-, MTP) — Поддержка мульти функции пакетной передачи: позволяет отправлять большие объемы данных
без разделения их на макс трансфертов размер пакета.

— Использует файлы конфигурации, чтобы изменить ядро и конфигурацию библиотеки без изменения кода библиотеки (только чтение).

— Включает в себя 32-разрядных выровненные структуры данных для обработки передачи DMA основе в Highspeed Режимы.

— Поддержка мульти USB OTG основные экземпляры из пользовательского уровня через конфигурационный файл (Позволяет работать с более чем одним USB хост / устройство периферии).

— RTOS и Автономная работа

— Связь с низкоуровневым драйвером осуществляется через уровень абстракции, используя

Файл конфигурации, чтобы избежать каких-либо зависимости между Библиотекой и низкого уровня драйвера.

o Стек STemWin Графический

— Профессиональные решения для развития GUI на основе EMWIN Segger в решение

— Оптимизированные драйверы дисплея
— Программы для генерации кода и редактирования растрового (STemWin Builder …)

o LibJPEG

— Стандарт с открытым исходным кодом

— Реализация C для кодирования изображения JPEG и декодирования.

o FreeRTOS

— Стандарт с открытым исходным кодом

— Уровень совместимости CMSIS
— Операция Tickless в режиме пониженного энергопотребления

— Интеграция со всеми модулями STM32Cube Middleware

o FAT файловой системы

— FatFs FAT библиотека с открытым исходным кодом

— Поддержки длинных имен

— Поддержка динамических несколькими накопителями

— RTOS и режимом автономной работы

— Примеры с MicroSD и USB хост-класса запоминающих

o LwIP TCP / IP стек

— Стандарт с открытым исходным

— RTOS и режимом автономной работы

• Примеры, основанные на компонентах Middleware: каждый Middleware компонент поставляется с одним или несколькими примерами (называемых также приложений), показывающие, как использовать его примеры интеграции, которые используют несколько компонентов промежуточного также предоставляются.

· Level 2: Этот уровень состоит из одного слоя, который является глобальным реальным-временем и графическое демонстрации на основе слоя Middleware программного обеспечения, слоя низкого уровне абстракции и приложений, которые используют периферийные устройств для функции поддерживаемых отладочным набором.

3.1.2. Настройка системы в CubeMX

Попробуем создать проект для нашей отладочной платы STM32F429I-DISCO!

Рис. 3.1.2.1. Стартовое окно

Выбираем новый проект – «New Project«. Сразу же открывается окно с огромным количеством настроек, в котором нам необходимо выбрать микроконтроллер, который мы собираемся использовать в нашем проекте. Я выбрал STM32F429I‑DISCO0. Появляется новое окно:

Рис. 3.1.2.2. Окно выбора либо кристалла, либо отладочной платы

Выбираем закладку Board Selector и видим следующее окно


Рис. 3.1.2.3. Окно выбора либо кристалла, либо отладочной платы с общим описанием платы

Далее двойным щелчком выбираем плату и видим опять новое окно J))).

3.1.2.1. Окно Настройки кристалла

Рис. 3.1.2.4. Окно Настройки кристалла

В окне на рис. 3.1.2.3. Показаны два поля : 1 – ое , позволяет настроить те или иные регистры в заданные состояния, а справа, во втором окне , задана цоколевка кристалла. Если заметить, то на многих пинах уже заданы определенные настойки. Допустим на пинах PC14, PC15 – эти пины определены, как вход и выход для кварцевого резонатора. А ножка PC1 – определена как SPI и подходит к MEMS датчику. Вот в принципе общие возможности. Так же по нажатию мышки на пин, можно выбрать его настройки, если вы хотите его переопределить! ТО есть всё очень удобно и наглядно, что очень важно, чтоб не сидеть и не писать что где и как ! Очень системный подход!

Рис. 3.1.2.5. Представлены возможные иконки состояния тех или иных регистров

3.1.2.2. Окно Схема тактирования МК

Далее идет закладка «Clock Configuration«, посмотрим что там! Ну и что Вы видите ?! Красота !

Рис. 3.1.2.5. Схема тактирования МК

Опять же всё очень наглядно и можно менять многие параметры и при этом учитываться допустимые соотношения делителя и умножителя PLL и если вы зададите недопустимые данные то, вам высветиться ошибка!

Переходим к следующей закладке «Configaration«. В ней мы можем настроить MiddleWare уровень, добавить MiddleWare компоненты а также настроить периферию. Ну я для примера добавил FASTFS , FreeRTOS , и эти элементы добавляться в систему и можно произвести их настройку. В тестовом примере мы пока их не будем использовать. Так же видно что у нас нет никакой аналоговой части. Это связано с етм что в первом окне мы не выбрали ни одного АЦП. Это можно легко сделать перейти на первую вкладку и выбрав какой нить АЦП .

Рис. 3.1.2.6. Настройка конфигурации периферии и MiddleWare компонентов


Рис. 3.1.2.6. Пример выбора АЦП

Для примеры мы просто создадим настройки по умолчания, где нет АЦП и дополнительных компонентов.

Рис. 3.1.2.7. Пример нашего тестового проекта

3.1.2.3. Окно Конфигурация Элементов МК

Следующая закладка, отвечает за расчет мощности рассеивания. Но её мы рассматривать не будет. Посмотрите её сами. А теперь перейдём к самому ответственному это написания кода, включение и управление нашим китом!

3.2. Программируем в Keil

3.2.1. Генерируем инициализационный код, наконец-то

От создания кода нас отделяет, какая то малость.

Рис. 3.2.1.1. Вызываем меню создания инициализационного кода

Откроется окошко, в котором можно выбрать имя и папку вашего проекта. Выбрать компилятор, в данном случае выбираем «MDKARM V 5″ (Keil v5.x). А во второй закладке можно выбрать опции создания вашего кода. Всё, осталось запустить генерацию!

Рис. 3.2.1.2. Опции генерации проекта

Последний штрих это то, что программа позволяет создать отчет о вашем проекте , это делается в том же меню где выбирали генерацию кода, как показано на рис. 3.2.1.1. Сделайте его самостоятельно! Ну а теперь. Будет очень трудно. Так что идите перекусите, подкрепитесь или просто походите вокруг стула, для отвлечения. И снова возвращайтесь к нам. Дальше интереснее!!!

3.2.2. Начинаем программировать

Заходим в папку с проектом у меня он выглядит так.

Рис. 3.2.2.1. Структура фалов проекта

CubeMX нам создал папку проекта, где уже есть все необходимые файлы для компиляции. Раньше же это надо было делать руками и из общего набора заголовочных фалов и исходников кода, создавать свои сборки. Теперь этого не надо, всё уже в одной папки и рядом! При этом вы можете использовать просто голый CMSIS либо HAL ( дать ссылку на статью, где даеться пояснение на эту тему).

Ну чтож по приветствуем мир J))). С учетом того, что в пункте 2, мы произвели установку Keil, заходим в папку MDKARM и находим там Проектный файл для Keil, с расширением *.uvprojx запускаем его. У меня он будет называться «Second.uvprojx» (потому что первый у меня не получился ^) .

Рис. 3.2.2.2. Структура проекта

Мне кажется очень неплохая структура, проекта которая разбита на следующие папки и уровни:

· HAL API – функции HAL уровня;

· CMSIS – драйверы низкого уровня;

· Application/USER – прикладные функции (main.с, _it.c – описание обработчиков прерывания и др.) ;

· Application/MDKARM — здесь стартап ассемблерный код (файл startup_stm32f429xx.s ), в котором указана описание функций обработчиков прерывания и указание на main entry point ( на начальную входную функцию , т.е. функцию main), функцию, с которой будет грузиться проект.

Мы в последующих статьях рассмотрим больше подробностей , а сейчас просто попробуем написать пару строк для мигания светодиодом, посредством HAL и поймем заключительные моменты для запуска полноценного приложения!

4. Ура мы запустили Keil HAL LED

А сейчас допишем такие строки в код фала main.c

1. int main(void)

2. {

3.

4. /* USER CODE BEGIN 1 */

5.

6. /* USER CODE END 1 */

7.

8. /* MCU Configuration———————————————————-*/

9.

10. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

11. HAL_Init();

12.

13. /* Configure the system clock */

14. SystemClock_Config();

15.

16. /* Initialize all configured peripherals */

17. MX_GPIO_Init();

18.

19. /* USER CODE BEGIN 2 */

20.

21. /* USER CODE END 2 */

22.

23. /* Infinite loop */

24. /* USER CODE BEGIN WHILE */

25. while (1)

26. {

27. /* USER CODE END WHILE */

28.

29. /* USER CODE BEGIN 3 */

30.

31.

32. HAL_GPIO_WritePin(GPIOG,GPIO_PIN_13,GPIO_PIN_RESET);

33. HAL_Delay(500);

34. HAL_GPIO_WritePin(GPIOG,GPIO_PIN_13,GPIO_PIN_SET);

35. HAL_Delay(500);

36.

37. // GPIO_Pin_13

38.

39.

40.

41. }

42. /* USER CODE END 3 */

43.

44. }

Строки с 32 – 35 вставляем в файл main.c .А теперь самый ответственный момент зашьем проект.

5. Заключение

Мы познакомились с необходимым набором элементов для программирования и разработки проектов под МК STM32 на базе процессоров CortexM4. Познакомились с архитектурой и структурой проекта построенного с использованием CubeMX, с настройками приложения CubeMX. Так же научились и разобрались со структурой проекта в Keil. Ну и конечно создали программу мигания светодиодом, расположенным не плате с использованием функцция HAL. В следующих статьях мы более углублённо и детально разберем создания новых проектов и работы с переферией платы по средством Keil! Спасибо за внимание !

6. Используемые материалы

ARM® Cortex®-M:

· Cortex-M Series from ARM.com ;

· Wikipedia ARM_Cortex-M

· Cortex-M4 Technical Reference Manual

STM32 STMicroelectronics:

· ST.com

· STM32 Cortex-M

Статьи :

· Cortex-M4 STM32



Next Запись

Реализация беспроводного канала управления при помощи встраиваемых радиомодулей 433МГц STM32F4

 Реализация беспроводного канала управления при помощи встраиваемых радиомодулей 433МГц ... Read more




Previous Запись

ARM Cortex - M4 вычислительные возможности ( DSP, MAC , FPU , SIMD )

 ARM Cortex - M4 вычислительные вохможности ( DSP, MAC ... Read more

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 оценок, среднее: 5,00 из 5)
Загрузка...

24 thoughts on “STM32F4 Начнем программировать CubeMX!”

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*

© 2014-2024 ElectroProg Все права защищены!

↓
↓