STM32. Работаем в среде Visual Studio + VisualGDB + CubeMX

STM32. Работаем в среде Visual Studio + VisualGDB + CubeMX

Александр Левчук dslev@yandex.ru

 

Главная

Предисловие

Подготовка среды разработки

Аппаратура

Создание проекта в среде Visual
Studio + VisualGBD + CubeMX

Общая структура проекта VisualStudio + VisualGBD + CubeMX

Окно свойств проекта VisualGDB

Литература

 


Виртуальный СОМ порт. Часть 1

Виртуальный СОМ порт. Часть 2

Часы RTC, настройка по серверам точного времени

 

STM.png

[ исправлено 03-Jan-2020]

 

 

 

 

 

 

 

 

Предисловие

В статье описывается быстрый способ создания среды разработки для микроконтроллеров STM32, на основе Visual Studio и VisualGDB для проектов, выполненных в CubeMX. Все настройки и установки выполнены в Visual Studio 2013, приведен пример проекта CubeMX для реализации виртуального порта СОМ и настройки часов RTC по данным сервера точного времени.

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

Существует насколько сред разработки для STM32 популярных и не очень, Keil, IAR, бесплатный CooCox. По популярности на первом месте Keil, но это вопрос спорный, сколько программистов столько и мнений. Есть другой подход, использовать VisualGDB. VisualGDB это кроссплатформа, которая обеспечивает легкую и комфортабельную разработку непосредственно в Visual Studio. Для тех, кто работал в Visual Studio, хотя бы на начальном уровне, это реальная возможность не изучать дополнительно новую среду разработки Keil, IAR и прочее. VisualGDB устанавливается в средуVisual Studio наподобие плагина и дает вам возможность работать с кодом CubeMX на С и компилятором CLANG. Практически от вас требуется изучить только те вещи, которые относятся к семейству STM32. VisualGDB не требует значительных усилий для своего изучения на начальном этапе.

VisualGDB поддерживает:

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

 

Подготовка среды разработки

Процесс подготовки среды Visual Studio + VisualGBD + CubeMX не сложный. Установка Visual Studio должна быть сделана и не описывается. VisualGDB совместима с бесплатной средой Visual Studio Community. Примеры приводятся для Visual Studio 2013. VisualGDB продукт платный, на сайте производителя можно закачать 30-дневную ознакомительную версию. Однако есть и варианты на торрентах. Затем закачиваем CubeMX и STM32CubeProgrammer с сайта STMicroelectronics, продукты бесплатные. Для полноценной работы с сайтом STMicroelectronics придется зарегистрироваться.

Затем устанавливаем VisualGDB. В результате в меню Visual Studio Tools появится пункт VisualGDB. Его можно раскрыть и увидеть несколько пунктов. Также ссылки на VisualGDB появляются в свойствах проекта, это будет рассмотрено далее. Для установки и обновления необходимых для работы продуктов нужен только пункт Manage VisuaIGDB Packages. Этот пункт меню также будет рассмотрен далее по тексту.

Закачиваем с сайта STM CubeMX и STM32CubeProgrammer и устанавливаем оба продукта. Сайт STM довольно запутанный и найти там нужный продукт непросто, можно использовать поиск. Установку следует производить в раздел диска, где находится Visual Studio, так лучше. Затем загружаем на выполнение CubeMX и открываем любой проект или создаем, лучше открыть готовый из примеров STM или пример, который лежит здесь под именем Cube_USB1. Если вы берете готовый проект, то скопируйте файл xxx.ioc в папку проекта и затем откройте в CubeMX. Посмотрите установки проекта в других окнах CubeMX. Ничего не изменяйте, проект настроен для создания виртуального СОМ порта (класс CDC USB) и управления RTC (часы). Подробности работы в CubeMX здесь не приводятся, сложного ничего нет, да и информации в Интернете много. Однако для осмысленной работы потребуется изучить в общих чертах строение интерфейса USB и модуля RTC. В последующих статьях эти вопросы будут рассмотрены подробней. Затем нажмите GENERATE CODE.

В папке проекта вы увидите следующие файлы.

Этот набор файлов достаточен для создания проекта в Visual Studio с установленным продуктом VisualGDB. В папке Drivers\STM32F1xx_HAL_Driver лежат файлы высокоуровневого драйвера HAL. Проект будет строится на основе HAL. В интернете вы обнаружите много ругательных отзывов на HAL. Не обращайте внимания, так всегда бывает для новых продуктов. С помощью HAL вы быстро получите результат, а затем можно спокойно изучать, использовать другие библиотеки, если потребуется. Все зависит от требований к проекту, можно и ассемблере все написать, вопрос как долго вы будете это делать.

В папке Middlewares\ST\STM32_USB_Device_Library\ лежат файлы HAL для класса CDC USB. В папке Drivers\CMSIS лежат файлы библиотеки CMSIS, это независимый от производителя уровень аппаратной абстракции для серии ядер Cortex-M, а также интерфейс отладчика. Эта библиотека не понадобится, документация на нее загружена при установке CubeMX.

Аппаратура

Для разработки и отладки была выбрана недорогая (~10$) китайская плата с минимальным обвесом на контроллере STM32F103VET6 (на рисунке в начале статьи). Такой выбор обусловлен несколькими факторами.

Для работы с часами RTC контроллера на плату был распаян обычный часовой кварц, место расположено рядом с основным кварцем. В техническом описании контроллера настоятельно рекомендуется использовать специальный кварц с нагрузочными емкостями в 6/7 пФ, но и обычный кварц, с нагрузкой 10 пФ, работает в комнатных условиях. Производитель рекомендует для всех контроллеров STM32 использовать специально разработанный резонатор для нагрузки 7 пФ. Статью об этих резонаторах можно прочитать здесь https://www.compel.ru/2015/02/25/kvartsyi-kx-327nht-32-768-kgts-dlya-mikrokontrollerov-stm32. Кроме указанных в статье кварцах существует много других производства фирмы TXC, например 9HT7-32.768KDZY-T, 9HT11-32.768KDZY-T. Для других кварцевых резонаторов не гарантируется устойчивый запуск за определенное время и в диапазоне температур, этот параметр весьма критичен. Если в вашем устройстве RTC странно работает, следует обратить внимание на кварцевый резонатор и его емкостную нагрузку. Для батареи резервного питания RTC места на плате не предусмотрено, поэтому держатель батареи был приклеен термоклеем снизу платы и распаян на контакты перемычек "батарейное питание - общее питание RTC" (cхема_платы). Кнопка переключения питания была удалена, поскольку порт USB использовался для связи с компьютером в процессе отладки. Внешнее питание подается на контакты кнопки. Все изменения показаны в комментариях не схеме платы.

В качестве внутрисхемного отладчика/программатора использовалась китайская версия ST-LINK/V2, описание на русском языке
ST-LINK/V2. Подключите ST-Link к компьютеру и к плате и запустите STM32CubeProgrammer, вы увидите в правой стороне окна STM32CubeProgrammer такую картинку.

Можно нажать кнопку Connect и прочитать содержимое памяти контроллера. Если не получается чтение следует обновить драйвер. Для этого отключите ST-LINK/V2 кнопкой Disconnect и затем нажмите кнопку Firmware Upgrade.

Появиться окно STLinkUpgrade. Нажимаете кнопку Open in update mode. Внизу появляется сообщение, о том, что ST-Link находится не в режиме DFU и нужно его перезапустить. Сообщение незаметное и его можно не увидеть. Переподключаем разъем USB и повторно жмем кнопку Open in update mode. После этих манипуляций становится доступной кнопка Upgrade. Нажимаем ее и наблюдаем за загрузкой нового драйвера. Не будет лишним напомнить, что отключение электроэнергии в этот не продолжительный момент приведет к большим проблемам. Источник бесперебойного питания спасет работу, если аккумулятор позволяет работать минут пять. В противном случае подключайте автомобильный аккумулятор (можно старый), не опасайтесь, мой компьютер работает в такой схеме несколько лет и успешно. Также обратите самое пристальное внимание на качество кабелей USB. Признаки качественного кабеля такие, прозрачная изоляция, под которой виден экран, если кабель длиннее 30 см, то должен быть ферритовый фильтр около разъема.

Теперь можно переходить к созданию проекта в среде Visual Studio + VisualGBD + CubeMX.

Создание проекта в среде Visual Studio + VisualGBD + CubeMX

В Visual Studio создайте проект на основе кода, созданного CubeMX. Для примера используется код, созданный из установок Cube_USB1.ioc. Установки проекта показаны на рисунке.

Укажите свои установки для размещения проекта в соответствии с примером, показанным на картинке. Нажмите ОК. Появится следующее окно, в котором нужно выбрать пункт "Automatically import a project in a different format".

После выбора "Automatically import a project in a different format" сразу появится следующее окно.

В этом окне выбираете пункт "Import an existing STM32CubeMX Project (GPDSC)" и указываете путь к проекту. Здесь же можно установить галочку для размещения проекта в той же папке, где находится проект CubeMX, "Move the Visual Studio project to the imported project directory". Прямо из окна можно вызвать обучающий курс и помощь. Жмем Next и переходим в следующее окно.

В этом окне выбираете набор инструментов ...\sysgcc\arm-eabi. Затем указываете имя вашего контроллера, если таковой отсутствует, то можно прямо из окна подкачать недостающие контроллеры. В этом же окне, внизу, указан путь к библиотеке устройств, этот путь можно изменить, но лучше все оставить по умолчанию и изменить позже. Жмем Next и переходим в следующее окно.

В этом окне выбираем отладчик OpenOCD. Небольшая цитата из описания на русском языке (http://microsin.net/programming/ARM/openocd-manual-part1.html)

"Название OpenOCD произошло от сокращения Open On-Chip Debugger (открытый отладчик для чипов). OpenOCD предоставляет инструментарий отладки (debugging), внутрисхемного программирования (in-system programming, ISP), внутрисхемного тестирования (boundary-scan testing) для встраиваемых систем (микроконтроллеров, FPGA и т. п.). OpenOCD предоставляет доступ к адаптеру для отладки (debug adapter) - маленькому аппаратному модулю, который помогает получить требуемые сигналы для отладки целевого устройства (обычно с одной стороны адаптер подключается к компьютеру через USB, а с другой стороны имеется интерфейс JTAG [1], через который подключено отлаживаемое устройство). Такой адаптер нужен, так как у хоста отладки (компьютер, на котором запущен OpenOCD) нет поддержки специальных сигналов и коннектора, необходимых для подключения к целевому устройству."

Об OpenOCD есть много статей в Интернете, которые можно почитать, когда возникнут проблемы. К счастью, об отладчике можно пока ничего не читать, достаточно подключить ST-Link вашей версии к компьютеру и нажать Test. Вы получите окно с сообщениями. Если в нем не будет сообщений об ошибках, то можно спокойно работать далее. В противном случае попытайтесь обновить драйвер ST-Link.

После создания проекта можно ознакомиться с его настройками. Откройте пункт меню Tools/Manage VisuaIGDB Packages. Вы увидите следующее окно.

В этом окне показаны все продукты, которые должны быть установлены в процессе подготовки среды разработки. Под каждым пунктом указано расположение продукта. Из наименования продукта можно сделать вывод о его назначении, первый пункт - компиляторы, второй и третий (BSP) - поддержка платы, последний (OpenOSD) - универсальная среда отладки. Если вас не устраивает размещение продукта, тогда переведите мышь в правый угол окна и вам отобразится 3 или 4 иконки, как на рисунке для второго пункта. Если есть левая верхняя иконка тогда данный продукт можно переместить в другое расположение на диске, что бывает необходимо. Некоторые продукты нельзя переместить, это видно на примере для среды отладки OpenOCD. Процедура перемещения может быть длительная. Если вы не видите в списке установленных продуктов необходимого для работы, тогда следует в меню Online выбрать нужный продукт и загрузить его.

Библиотека BSP может быть загружена в нескольких версиях для разных устройств, в таком случае следует установить галочку "Allow installing multiple versions of this BSP". Пункт меню Updates отображает продукты, которые можно обновить.

Общая структура проекта Visual Studio + VisualGBD + CubeMX

После создания проекта на основе кода CubeMX в окне Visual Studio/Solution Explorer вы увидите дерево проекта. Все папки и файлы можно разделить на две группы по доступу к ним пользователя для написания своего кода.

Есть отдельная папка VisualGDB settings, которая содержит свойства проекта отдельно для режима Release и режима Debug. Кроме того на рисунке показан файл диаграммы SysprogsCodeMap.dgml. Их назначение будет рассмотрено позже.

Примечание.

Папки раскрываются не только до файла, но и файл раскрывается до функций. На рисунке это не отображено.

Окно свойств проекта VisualGDB

Проект под VisualGDB имеет два набора свойств, обычный набор Visual Studio и отдельный набор свойств для проекта VisualGDB. Причем в обычный набор свойств Visual Studio также добавлен пункт меню VisualGDB. Доступ к свойствам проекта VisualGDB производится несколькими способами:

Окно имеет большое число установок проекта, большинство которых используются по умолчанию и не требуют настройки. Более подробно рассмотрим такой важный режим, как выполнение кода и отладка в памяти SRAM, а также настройку IntelliSense. На рисунке окна свойств проекта, в состоянии по умолчанию, отображается режим Release, который выполняется из FLASH памяти.

Параметры этого режима после компиляции (F7) показаны на рисунке ниже.

Кроме режима Release, по умолчанию есть еще режим Debug, который также выполняется из FLASH памяти. Следует заметить, что измения режима работы Flash\SRAM производятся одновременно для Release и Debug. Можно создать отдельные режимы со своими именами, однако они ничем не будут отличаться от стандартных по части исполнения кода Flash\SRAM. Например создадим отдельный режим выполнения и отладки из SRAM. Для этого выбираем режим Debug, появится окно предупреждения о смене режима, жмем OK и затем нажимаем клавишу ADD, появится окно для указания нового режима Debug, указываем имя режима DebugSRAM. Далее нажимаем клавишу ChangeSetting, появится окно предупреждения, жмем OK и в нижней части окна в строке Execute from нажимаем SRAM, а затем клавишу OK. Теперь в списке режимов проекта Visual Studio появится пункт DebugSRAM. Выбираем этот пункт и жмем F7 для выполнения компиляции.

Наблюдаем новые параметры компиляции, FLASH память свободна, можно вести отладку обычным образом, нажав F5, код будет исполняться из SRAM. Также можно детально просмотреть структуру памяти и некоторые другие параметры если выбрать меню VIEW\Embedded Memory Explorer.
Существуют два файла компоновщика STM32F103VE_flash.lds и STM32F103VE_sram.lds. Первый файл используется при работе из FLASH памяти как при отладке, так и без отладки, а второй используется только для режима отладки из SRAM. Расположение файлов можно увидеть в свойствах проекта VisualGDB, меню MSBuild settings в строке Linker Script. Рядом со строкой имеется кнопка для переноса файла в проект. Следует выполнить перенос файлов в проект.

После установки режима отладки из SRAM можно сразу запустить отладку, нажав F5. Если используется аппаратный сброс кнопкой на плате, следует переключиться в режим Boot1 (запуск из SRAM), установкой соответствующих перемычек на плате. После отладки режима в SRAM переход к режиму Release из FLASH требует вызова окна свойств и выполнения всей, описанной ранее, процедуры переключения режимов. Затем можно вести работу из FLASH также в двух режимах Debug или Release. Для запуска режима Debug достаточно нажать F5, а для запуска режима Release следует в меню Debug выбрать пункт Program and Start Without Debugging. Этот пункт есть еще на вкладке Solution Explorer, если щелкнуть правой кнопкой мыши на имени проекта.

Перед окончательной записью FLASH памяти можно провести оптимизацию кода в окне общих свойств проекта (Properties), меню С/С++, пункт Optimization. Всего можно выбрать пять вариантов оптимизации, не считая ее запрета.

Свойства проекта, раздельно для Release и Debug можно посмотреть и изменить, открыв файлы в папке VisualGDB settings. Они просто раздельно дублируют свойства проекта.

Для настройки форматирования кода нужно открыть окно IntelliSense Setting и указать пункты, показанные на рисунке ниже.

Указанные на рисунке настройки для IntelliSense устанавливают в окне проекта значок, который открывает окно настроек форматирования кода.

Значок аходится в правом углу над полосой вертикальной прокрутки в ряду из нескольких значков. Окно настроек форматирования кода содержит несколько вариантов стилей форматирования. Выбор форматирования сопровождается демонстрацией примера, как будет выглядеть код до и после фориматирования. Отключить IntelliSense можно из меню Tools/Options/VisualGDB/General.

Кроме указанного значка важным является следующий по порядку значок, который включает/выключает аннотацию для каждой функции кода.

Если щелкнуть по строке 3 references, окроется окно, в котором можно увидеть ссылки на данную функцию.

 

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

Существует еще одна полезная возможность построения графического отображения зависимостей. На сайте VisualGDB эта возможность упоминается только для С++. Однако и для кода С CubeMX графика функционирует достаточно хорошо, возможностей много, можно построить практически всю структуру приложения. Во всяком случае отобразить свои функции и их связи можно. Вызывается графика из контестного меню, пункт Show on code map. Этот пункт меню доступен из основного окна кода при щелчке на имени функции или из окна отображения дерева файлов и функций. Поэкспериментировав можно построить например такую диаграмму. Построение графика следует начинать со своих функций. Диаграмма отображает блок зависимостей для RTC и USB-виртуального порта. Используя меню Legend можно установить цвет, добавить иконки, комментарии и многое другое. Связи между функциями строятся как автоматически так и вручную. Можно автоматически выравнивать элементы картинки или вручную. В целом возможности этого графического редактора заслуживают отдельной статьи. На рисунке ниже вы увидите пример построения зависимостей для новых (своих) функций, которые окрашены в голубой цвет. Функции, в которые внесены свои дополнения в комментарии /* USER CODE ххх */, окрашены в оранжевый цвет и т.д.

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

Литература.

Мартин М. Инсайдерское руководство по STM32

Агуров П.В. - Практика программирования USB - 2006

Datasheet STM32F103xET6

Description of STM32F1 HAL and Low-layer drivers

Reference Manuals

USB Complete. The Developer’s Guide, Fifth Edition, Jan Axelson

В начало