cube mx stm32 обучение

Начинаем работать в STM32CubeMX. Часть 1

Приветствую аудиторию хабра, и хочу предложить вашему вниманию первый пост, посвященный использованию среды разработки STM32CubeMX, написанный для тех, кто хочет начать изучение STM32 «с нуля».

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

1. Небольшое введение

Сначала сделаю небольшое пояснение. Для изучения данного материала вам понадобится отладочная плата с микроконтроллером STM32. Я использую плату STM32F746G Discovery, которая на сегодняшний день является одной из самых лучших, и, соответственно, дорогих плат семейства Discovery.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Однако для освоения большей части материала будет достаточно любой, даже самой простой платы на STM32. Я рекомендую именно платы Discovery, т.к. они уже содержат отладчик ST-Link, и для работы вам понадобится только кабель MiniUSB. Для начала не нужен даже источник питания, плата питается через тот же кабель.

Естественно, при использовании микроконтроллера, отличного от STM32F746G нужно будет делать поправки в проектах на другую тактовую частоту, другую распиновку и т.п., но суть остаётся той же. Рекомендую сразу скачать документацию к вашей плате с принципиальной схемой и pdf на микроконтроллер.

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

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

Ещё нам понадобится сам STM32CubeMX (скачивается бесплатно), и любая IDE для работы с проектом на С и поддержкой ST-Link. Их много, есть коммерческие, есть бесплатные, и я намеренно не буду приводить никаких названий. Каждый выбирает для себя.

2. Hello World, или управление светодиодом

Сначала вам нужно скачать и установить STM32CubeMX. Скачать можно бесплатно с сайта st.com. Скажу сразу, STM32CubeMX существует только в Windows-версии. Пишут, что нормально работает под wine, я лично не пробовал.

Заходим в File/New Project, выбираем нужный микроконтроллер. Для этого удобно пользоваться фильтрами в верхней части окна.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

В нашем случае это STM32F746NGHx.

Далее настраиваем тактовый генератор. Во вкладке Pinout выбираем работу с внешним кварцем:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Во вкладке Clock Configuration в поле HCLK (MHz) пишем 216. В ответ получаем сообщение «No solution found using the current selected sources. Do yoy want to use other sources?» Отвечаем «OK» и выбираем источник HSE в мультиплексоре PLL Source Mux. Значения PLLM, PLLN и PLLP устанавливаем, как показано на рисунке. Проверяем, что HCLK = 216MHz.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Теперь надо сконфигурировать GPIO, управляющий светодиодом. Это порт PI1. На вкладке Pinout находим вывод PI1, кликаем на него и устанавливаем в значение GPIO_Output.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Для дальнейшего удобства можно присвоить пину имя. Это делать необязательно, но давайте это сделаем, чтобы код был более читаемым. Для этого на вкладке Configuration в столбце System нажимаем кнопку GPIO.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Попадаем в окно «Pin Configuration» и в поле User Label пишем «Led».

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Сейчас можно сгенерировать код (Project/Generate Code). STM32CubeMX генерирует не только исходный код, но и файлы проекта для ряда популярных IDE. Обратим внимание, что в коде расставлены комментарии вида:

Свой код можно писать только в них, иначе при повторной генерации исходника ваш код будет затёрт.

Итак, находим цикл while(1) в main() и пишем в нём следующее:

Сейчас можно запустить проект. Подключаем плату и загружаем прошивку. Светодиод на плате должен мигать с частотой 1Гц.

Однако приведённый выше подход не идеален. Функция HAL_Delay содержит внутри пустой цикл, и наша программа не может заниматься в это время ещё чем-то полезным. Для решения проблемы есть два пути: использование прерываний и использование операционной системы реального времени. Про операционную систему я напишу в другой раз, а работу с прерываниями мы освоим сейчас.

3. Таймер и прерывания

Настроим таймер, например TIM1. Для этого во вкладке Pinout выбираем для этого таймера источник тактирования:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Источником тактирования стала внутренняя тактовая частота периферии, равная для нашего случая 108MHz. Уточнить это значение или изменить его путём деления главной тактовой частоты можно на вкладке Clock Configuration.

Теперь переходим на вкладку Configuration и настраиваем частоту срабатывания таймера. Нажимаем на кнопку TIM1 и в появившемся окне во вкладке Parameter Settings задаем значения Prescaler и Counter Period.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

Update_event = TIM_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1))

В нашем случае частота будет равна 216e6 / ((53999 + 1) * (1999 + 1)) = 2Hz. При этом частота мигания светодиода составит 1Hz, как в предыдущем примере.

Теперь на вкладке контроллера прерываний (NVIC Settings) нужно разрешить прерывание TIM1 Update:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

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

4. Что дальше?

На этом я заканчиваю первую часть. Что планируется дальше? В следующей части я планирую описать работу с встроенным ЦАП и затронуть тему DMA. В качестве небольшого анонса: мы научимся генерировать вот такую красивую синусоиду:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

(Эта синусоида не очень красивая, на самом деле, но будет лучше).

В дальнейших планах: работа с контроллерами USB (для начала в режиме VCP, виртуального COM-порта), контроллера Ethernet, АЦП, и, возможно, затронем тему использования FreeRTOS.

Источник

STM32 fast start. Часть 1 ПО, материалы, Cube MX.

В последнее время все чаще сталкиваюсь с холиварами на тему Cube MX и HAL, применительно к контроллерам STM32.
С одной стороны — стоят защитники, которым нравится удобство конфигурирования и читаемость кода.
С другой — приверженцы писать все руками, которым важна скорость работы и бережное использование ресурсов.
Для того, чтобы расставить все точки над i — попробуем написать «Hello world» тремя наиболее часто используемыми путями CMSIS, LL, HAL. Оценим затраты (ресурсы контроллера, объем исполняемого файла, и конечно же время работы разработчика).
Статья будет состоять из нескольких частей:
STM32 fast start. Часть 1 ПО, материалы, Cube MX.
STM32 fast start. Часть 2 Hello World на HAL, настройка отладки в Atollic TrueSTUDIO
STM32 fast start. Часть 3 Hello World на LL
STM32 fast start. Часть 4 Hello World на CMSIS
STM32 fast start. Часть 5 Подведение итогов, сравнение HAL, LL, CMSIS.

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Данную плату можно найти на всем известном сайте по цене от 100 российских рублей.
Искать по ключевым словам: STM32F103C8T6 ARM STM32 Minimum
https://ru.aliexpress.com/af/STM32F103C8T6-ARM-STM32-Minimum.html?SearchText=STM32F103C8T6+ARM+STM32+Minimum

Для того, чтобы залить прошивку и поиграть с отладкой — так же потребуется программатор
Для начала, да и для дальнейшего использования идеально подойдет китайский клон программатора ST-LINK V2
Купить можно на том же сайте по цене от 120 российских рублей

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Для разработки ПО под STM32 можно использовать различные IDE.
Самые популярные — IAR, Keil, Coocox (Eclipse).
Мы же пойдем по пути, который с недавних пор абсолютно бесплатно и в полном объеме предоставляет сама ST.
Будем использовать Atollic TrueSTUDIO for STM32 или в простонародии «Толик».
Какие плюсы у данного ПО: абсолютно бесплатно, нет ограничения по размеру кода, есть неплохой отладчик, простая установка и настройка.
Минусы: нет авто дополнения кода
Доступны версии под windows и linux
Качаем здесь https://atollic.com/resources/download/
С установкой данного ПО проблем возникнуть не должно, все интуитивно понятно, выбираем куда ставить и жмем все время «далее».
После установки можно не запускать, так как помимо самой IDE нужно еще кое что.
Если все таки запустили — просто закрываем.

Так как TrueSTUDIO — это средство разработки и отладки, хотелось бы не собирать проект руками (подключая требуемые библиотеки и прописывая пути), а получить некий преднастроенный файл, в котором можно без лишних заморочек сразу же писать код.
Для этого применяется программа генератор кода Cube MX или в простонародии «Калокуб».
Данное ПО является первым камнем преткновения в холиварах на чем же писать под STM: на регистрах и CMSIS или на HAL.
Защитники первой идеологии приводят такие аргументы: Cube MX генерирует огромный, ненужный объем кода, который к тому же замедляет работу МК.
Защитники второй — заявляют, что автоматически сгенерированный код сокращает время разработки, позволяя разработчику быстрее переключится к сутевой части устройства (к основной логике), отдав рутинную настройку периферии на откуп специализированному ПО (Cube MX).

Как ни странно — обе эти идеологии правдивы и применимы на практике, но только каждая в своих условиях.
Давайте рассмотрим пару примеров:

Пример №1: Требуется разработать устройство, максимально дешевое, так как планируется производство партиями по 100500 шт ежегодно. Естественно, каждый лишний рубль цены устройства — выльется в сотни тысяч рублей затрат на финальном устройстве. При этом в планируемой разработке есть пара тяжелых расчетов и работа с периферией (ADC, SPI, UART) на максимальных скоростях.
Устройство является полностью автономным продуктом, в дальнейшем планируется минимальные изменения за весь срок производства данного оборудования. Срок разработки до получения готового образца — 1-2 года.

Пример №2: Требуется прототип устройства, который возможно заинтересует заказчика и он закажет 100 шт аналогичных устройств для переоборудования своего объекта. Первая планируемая партия должна быть отгружена заказчику через 2 месяца. Размер первой тестовой партии 10 шт.
Точное ТЗ будет корректироваться в процессе работы над проектом, но известно, что в дальнейшем планируется несколько переработок аппаратной части, под которую необходимо оперативно подстраивать всю прикладную логику.

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

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

Как бы это не печально звучало — в реалиях современной разработки устройств в России — пример №1 встречается все реже, передавая эстафету примеру №2.

К обсуждению примеров №1 и №2 вернемся в самом конце цикла статей, а сейчас продолжим с подготовкой рабочего пространства.

На данном этапе сделаем небольшую паузу, зайдем на сайт https://my.st.com/ и зарегистрируем на нем учетную запись, так как политика компании ST не позволяет скачивать необходимые материалы без регистрации.
После того, как у нас появился доступ к сайту — скачиваем STM32 Cube MX.
https://www.st.com/en/development-tools/stm32cubemx.html
В самом низу страницы есть кнопка выбора версии, нам нужна версия 5.0.0

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Попутно, пока мы не ушли отсюда, качаем еще две вещи, которые пригодятся в дальнейшем
https://www.st.com/en/development-tools/stsw-link008.html
Драйвер ST-LINK V2

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

и
https://www.st.com/en/development-tools/stm32cubeprog.html
Программа прошивальщик (она же пригодится для полного стирания запоротого контроллера, подробнее о процедуре можно почитать ЗДЕСЬ)

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Установка драйвера, прошивальщика и самого Cub’a не вызывают затруднений, просто соглашаемся со всем и жмем далее.
После полной установки необходимого ПО — можем приступать к созданию проекта.
Для этого запустим Cube MX.
В появившемся окне нажмем на кнопку «ACCESS TO MCU SELECTOR»

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

На нашей целевой плате установлен микроконтроллер STM32F103C8T6
Введем его название в строке поиска и двойным щелчком выберем единственный найденный вариант
В этой же таблице видно основную начинку нашего МК (64 килобайт флеша, 20 килобайт оперативы и пр).

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Перед нами появился схематически изображенный корпус контроллера с разведенными в разные стороны ножками.
На данном этапе необходимо обязательно выбрать способ подключения отладчика.
Для этого на вкладке Pinout & Configuration в левом меню выбираем пункт SYS а в нем в выпадающем списке под названием «Debug» устанавливаем значение Serial Wire.
При этом краем глаза замечаем, что программа зарезервировала для отладочных целей два пина на мнемосхеме контроллера.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Искомый светодиод находится на ножке PC13
Соответственно, необходимо настроить данный вывод для работы в режиме выхода.
Для этого:
1) Находим вывод на мнемосхеме
2) Нажимаем на него правой кнопкой мыши, из выпадающего меню выбираем пункт «GPIO_Output»
3) Переходим в меню GPIO,
4) В списке выбираем PC13
3) Заполняем таблицу PC13-TAMPER-RTC Configuration в соответствии со скриншотом, особенно нас интересуют параметры GPIO mode и User Label

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Переходим к вкладке Project Manager, под вкладка Project
Обязательно заполняем следующие параметры:
1) Имя проекта (лучше использовать только латинские буквы)
2) Директорию, в которой будет создан проект (так же лучше использовать только латиницу)
3) IDE, в которой планируется работа над проектом (мы планируем использовать TrueSTUDIO)

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Спускаемся ниже, под вкладка Code Generator
Здесь обязательно отмечаем опцию Generate peripheral initialization as pair…
Таким образом получим более структурированный проект, в котором для каждого типа периферии имеется своя пара C и H файлов.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Остался последний шаг. Под вкладка Advanced Settings
1) Выбираем тип библиотеки HAL для всех периферийных модулей
2) Собираем проект с текущими настройками

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

При первоначальном запуске возможно потребуется загрузить актуальную версию библиотеки для выбранного семейства МК
Даем свое согласие на скачивание файлов

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Идем греть чайник или готовить кофе

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

После окончания работы кодо-генератора — сразу же открываем его

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Выбираем любую папку, где Atollic будет хранить рабочее пространство

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

При успешном открытии — перед нами предстанет главное окно Atollic TrueSTUDIO for STM
Общая информация нас мало интересует, поэтому сразу перейдем к дереву файлов.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Найдем там файл main.c и функцию int main(void)

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Продолжение — в следующей части

Помогла статья? Поддержи автора, кнопка перевода сверху рядом с меню поиска

Источник

STM32 fast start. Часть 1 ПО, материалы, Cube MX

В последнее время все чаще сталкиваюсь с холиварами на тему Cube MX и HAL, применительно к контроллерам STM32.

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

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

Для того, чтобы расставить все точки над i — попробуем написать «Hello world» тремя наиболее часто используемыми путями CMSIS, LL, HAL. Оценим затраты (ресурсы контроллера, объем исполняемого файла, и конечно же время работы разработчика).

Статья будет состоять из нескольких частей:

STM32 fast start. Часть 1 ПО, материалы, Cube MX.
STM32 fast start. Часть 2 Hello World на HAL, настройка отладки в Atollic TrueSTUDIO
STM32 fast start. Часть 3 Hello World на LL
STM32 fast start. Часть 4 Hello World на CMSIS
STM32 fast start. Часть 5 Подведение итогов, сравнение HAL, LL, CMSIS.

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

Идеальным вариантом будет бюджетная плата на STM32F103C8T6 микроконтроллере.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Данную плату можно найти на всем известном сайте по цене от 100 российских рублей.

Искать по ключевым словам: STM32F103C8T6 ARM STM32 Minimum

Для того, чтобы залить прошивку и поиграть с отладкой — так же потребуется программатор
Для начала, да и для дальнейшего использования идеально подойдет китайский клон программатора ST-LINK V2.

Купить можно на том же сайте по цене от 120 российских рублей.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Искать по ключевым словам ST LINK Stlink ST 252dLink V2 Mini STM8 STM32:

Для разработки ПО под STM32 можно использовать различные IDE.

Самые популярные — IAR, Keil, Coocox (Eclipse).

Мы же пойдем по пути, который с недавних пор абсолютно бесплатно и в полном объеме предоставляет сама ST.

Будем использовать Atollic TrueSTUDIO for STM32 или в простонародии «Толик».

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

Минусы: нет авто дополнения кода.

Доступны версии под windows и linux.

Качаем здесь https://atollic.com/resources/download/
С установкой данного ПО проблем возникнуть не должно, все интуитивно понятно, выбираем куда ставить и жмем все время «далее».

После установки можно не запускать, так как помимо самой IDE нужно еще кое что.

Если все таки запустили — просто закрываем.

Так как TrueSTUDIO — это средство разработки и отладки, хотелось бы не собирать проект руками (подключая требуемые библиотеки и прописывая пути), а получить некий преднастроенный файл, в котором можно без лишних заморочек сразу же писать код.

Для этого применяется программа генератор кода Cube MX или в простонародии «Калокуб».
Данное ПО является первым камнем преткновения в холиварах на чем же писать под STM: на регистрах и CMSIS или на HAL.

Защитники первой идеологии приводят такие аргументы: Cube MX генерирует огромный, ненужный объем кода, который к тому же замедляет работу МК.

Защитники второй — заявляют, что автоматически сгенерированный код сокращает время разработки, позволяя разработчику быстрее переключится к сутевой части устройства (к основной логике), отдав рутинную настройку периферии на откуп специализированному ПО (Cube MX).

Как ни странно — обе эти идеологии правдивы и применимы на практике, но только каждая в своих условиях.

Давайте рассмотрим пару примеров:

Пример №1: Требуется разработать устройство, максимально дешевое, так как планируется производство партиями по 100500 шт ежегодно. Естественно, каждый лишний рубль цены устройства — выльется в сотни тысяч рублей затрат на финальном устройстве. При этом в планируемой разработке есть пара тяжелых расчетов и работа с периферией (ADC, SPI, UART) на максимальных скоростях.

Устройство является полностью автономным продуктом, в дальнейшем планируется минимальные изменения за весь срок производства данного оборудования. Срок разработки до получения готового образца — 1-2 года.

Пример №2: Требуется прототип устройства, который возможно заинтересует заказчика и он закажет 100 шт аналогичных устройств для переоборудования своего объекта. Первая планируемая партия должна быть отгружена заказчику через 2 месяца. Размер первой тестовой партии 10 шт.

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

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

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

В таком случае выбирается контроллер, который можно быстро поставить в производство в текущем регионе, на нем делается инициализация с помощью Cube MX, пишется прикладная логика на HAL и прототип передается заказчику для тестирования. Такой проект может вести любой средний разработчик, который постиг навыки работы с целевым языком программирования. Вникание в тонкости работы периферии — практически не требуются.

Как бы это не печально звучало — в реалиях современной разработки устройств в России — пример №1 встречается все реже, передавая эстафету примеру №2.

К обсуждению примеров №1 и №2 вернемся в самом конце цикла статей, а сейчас продолжим с подготовкой рабочего пространства.

На данном этапе сделаем небольшую паузу, зайдем на сайт my.st.com и зарегистрируем на нем учетную запись, так как политика компании ST не позволяет скачивать необходимые материалы без регистрации.

После того, как у нас появился доступ к сайту — скачиваем STM32 Cube MX.

В самом низу страницы есть кнопка выбора версии, нам нужна версия 5.0.0

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Попутно, пока мы не ушли отсюда, качаем еще две вещи, которые пригодятся в дальнейшем
https://www.st.com/en/development-tools/stsw-link008.html

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Установка драйвера, прошивальщика и самого Cub’a не вызывают затруднений, просто соглашаемся со всем и жмем далее.

После полной установки необходимого ПО — можем приступать к созданию проекта.
Для этого запустим Cube MX.

В появившемся окне нажмем на кнопку «ACCESS TO MCU SELECTOR».

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

На нашей целевой плате установлен микроконтроллер STM32F103C8T6.

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

В этой же таблице видно основную начинку нашего МК (64 килобайт флеша, 20 килобайт оперативы и пр).

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

На данном этапе необходимо обязательно выбрать способ подключения отладчика.

Для этого на вкладке Pinout & Configuration в левом меню выбираем пункт SYS а в нем в выпадающем списке под названием «Debug» устанавливаем значение Serial Wire.

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Еще раз вспоминаем, что мы хотим помигать светодиодом на нашей плате.

Для этого необходимо сначала узнать, к какой именно ножке он подключен.

В этом нам поможет схема электрическая принципиальная:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Искомый светодиод находится на ножке PC13.

Соответственно, необходимо настроить данный вывод для работы в режиме выхода.

Продолжаем настройку проекта, переходим к вкладке Clock Configuration.

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Переходим к вкладке Project Manager, под вкладка Project.

Обязательно заполняем следующие параметры:

Спускаемся ниже, под вкладка Code Generator.

Здесь обязательно отмечаем опцию Generate peripheral initialization as pair…

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

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Остался последний шаг. Подвкладка Advanced Settings.

При первоначальном запуске возможно потребуется загрузить актуальную версию библиотеки для выбранного семейства МК.

Даем свое согласие на скачивание файлов:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Идем греть чайник или готовить кофе:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

После окончания работы кодо-генератора — сразу же открываем его:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Выбираем любую папку, где Atollic будет хранить рабочее пространство:

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

При успешном открытии — перед нами предстанет главное окно Atollic TrueSTUDIO for STM.

Общая информация нас мало интересует, поэтому сразу перейдем к дереву файлов.

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Найдем там файл main.c и функцию int main(void):

cube mx stm32 обучение. Смотреть фото cube mx stm32 обучение. Смотреть картинку cube mx stm32 обучение. Картинка про cube mx stm32 обучение. Фото cube mx stm32 обучение

Для самопроверки — попробуем собрать пустой проект

Источник

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

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