Atollic truestudio stm32 linux

Atollic TrueStudio

До недавнего времени у компании ST не было собственной IDE, однако в конце 2017 года она приобрела Atollic TrueStudio. Среда построена на основе Eclipse, и предлагает довольно много возможностей.

Так как это официальная среда для разработки, в курсе мы сделаем упор на неё.

При запуске среды Atollic TrueStudio предложет выбрать рабочее окружение (англ. workplace). Согласитесь со стандартным расположением, в прочем потом вы можете создать другую и переключаться между ними. Рабочее окружение позволяет группировать ваши проекты. Пока у нас нет никаких проектов, давайте создадим один.

Зайдите в меню FileNewC Project. Выбирите Embedded C Project и назовите проект в поле Project Name, скажем matrix_clock . Нажмите Next.

Далее следует выбрать целевой микроконтроллер. Дело в том, что каждый имеет определённый набор периферии, различный объём памяти и т.д. Библиотеке, линкеру и компилятору нужно знать эти памаметры, чтобы ваш проект успешно собирался и его можно было заливать на устройство. Мы используем stm32f103c8. Нажмите Next.

Уберите галочку с Use tiny printf/sprintf/fprint (small code size), мы не будем пользоваться этими функциями. Нажмите Next.

В качестве отладчика нужно выбрать ST-Link. Нажмите Finish.

Проект создан, но давайте зайдём в настройки и кое-что там посмотрим и поменяем. Открыть настройки проекта можно либо кликнув правой кнопкой в Project Explorer и выбрав Properties, либо через меню ProjectProperties. Откройте C\C++ BuilderSettings, во вкладке Tool Settings перейдите в C CompilerSymbols. Здесь определяются макросы-макркеры. В нашем случае указано, что используется стандартная библиотека периферии ( USE_STDPERIPH_DRIVER ) и микронконтроллер F1-серии Middle Destiny ( STM32F10X_MD ). Менять здесь ничего не нужно, но вы можете добавлять сюда свои макросы-маркеры.

Перейдите в подменю C CompilerDirectories. Здесь находится список директорий, в которых среда будет искать подключаемые файлы. Конечно все файлы можно расположить в папке src , но это не будет удобно при написании прошивки. Скачайте из репозитория на GitHub папку template и скопируйте из неё папку usr в директорию вашего проекта, в папку src . После этого все файлы можно будет подключать к проекту так:

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

У языка Си существует несколько стандартов. Мы будем использовать последний c11 ( gnu11 ). Если вам нужно поменять стандарт, сделать это можно через C CompilerGeneral.

Мы уже говорили, что компилятор может оптимизировать ваш код. По-умолчанию оптимизация отключена -O0 . Для MVP-прошивки включать её не стоит, это лишь осложнит процесс отладки. А вот если функциональность вашего устройство многократно усложняется и памяти не хватает, то имеет смысл включить оптимизацию по размеру -Os . Получить доступ к этой опции можно через C CompilerOptimization. Сейчас здесь ничего менять не нужно.

Последнее о чём нужно сказать, это то, как сгенерировать файл прошивки, который будет понятен утилите для прошивки. Что бы включить генерацию hex-файла, зайдите OtherOutput format и поставьте галочку Convert build output, выбрав Intel Hex.

После сборки проекта hex-файл появится в директории:

Говоря о размере прошивки, в Atollic TrueStudio есть специальное окошко Build Analyzer, которое по-умолчанию расположено в нижнем правом углу. В нём отображается получившийся размер прошивки, а так же объём занимаемой оперативной памяти.

Любое окно внутри среды можно развернуть на полный экран, просто два раза щёлкнув по нему. Вернуть всё в исходный вид можно таким же образом.

В Eclipse есть такое понятие как перспектива (англ. perspective). Они созданы для удобстра разработки и позволяют сгруппировать необходимые окна на экране. По-умолчанию включены только два: C\C++ и Debug. Первое вы видели после создания проекта, в нём удобно редактировать код, компилировать его и загружать на устройство. Второй Debug, мы рассмотрим чуть ниже.

Сейчас сложно себе представить разработку без системы контроля версий. В Atollic TrueStudio присутствует специальная перспектива для работы в графическом режиме со средой Git. Активировтаь её можно перейдя в меню ViewOpen PerspectiveGit. Здесь вы можете создавать новые репозитории, комиттить, пушить и т.д.

Если вы не знакомы с git , посетите его официальный сайт, там имеетс яцелая книга на русском языке посвящённая его работе, а так же обоснование зачем он нужен.

В отличии от простого блокнота, IDE обычно позволяет работать в режиме отладки (англ. debug). Вы можете выполнять программу построчно, попутно изучая состояние регистров микроконтроллера и видя значение переменных.

Читайте также:  Windows media 9 encoders

Для быстрого доступа к определённой точке в коде нужно поставить точку остановки (англ. breakpoint). В среде это делается довольно просто: совершите двойной клик левой кнопкой мыши в области с номером строки и сбоку появится синий кружок.

При первом запуске программы среда спросит вас сконфигурировать процесс загрузки прошивки. Здесь ничего менять не нужно. Нажмите OK.

Далее среда автоматически переключит вас в режим отладки, со всеми необходимыми инструментами. В верхнем инструментальном меню (англ. toolbar) появятся дополнительные кнопки, позволяющие приостанавливать работу программы, пыполнять пошаговое выполнение и т.д. Красный квадрат (стоп), позволит вам выйти из режима отладки и среда автоматически переключится в режим написания кода (C\C++).

Отлаживать программу добавляя в код printf() из стандартной библиотеки очень плохая практика, особенно для встраиваемых систем. Функция достаточно тяжёлая и приводит к раздутию кода и замедлению работы программы. Однако, отладчик позволяет создавать динамические printf() , которые не встраиваются непосредственно в программу. В Atollic вы можете добавить его щёлкнув правой кнопкой напротив желаемой строки и выбрать пункт Add dynamic printf. и передать ей желаемый аргумент, напримпер так:

Источник

STM32 fast start. Часть 2 Hello World на HAL, отладка в Atollic TrueSTUDIO

В прошлый раз мы осваивали создание нового проекта при помощи STM CubeMX первую часть можно найти здесь.

Для тех, кому лень перечитывать — закончилось все тем, что пустой проект успешно собрался.

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

За основу берем все тот же пустой проект, который инициализировали в прошлой части.

Для того, чтобы помигать светодиодом — нам необходимо придерживаться следующего алгоритма:

  1. Установить на ножке микроконтроллера состояние, инверсное текущему. То есть был 0 — ставим 1, был 1 — ставим 0 и тд.
  2. Подождать N количество микросекунд и вернутся к шагу 1.

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

Сначала найдем, куда мы подключили светодиод.

В файле main.c, сразу после вступительных комментариев, которые нам любезно написала компания ST — имеется строчка, для подключения заголовочного файл main.h

Нажимаем на эту строку правой кнопкой и находим пункт Open Declaration

Нажав на него — мы переместимся в файл main.h

Где найдем наши декларированные названия пинов и портов.

Помните, в первой части при инициализации вывода светодиода PC13 — мы заполняли поле User Label и вписывали туда CLOCK_LED?

STM32CubeMX при генерации проекта учел наши пожелания и теперь вместо абстрактных GPIO_PIN_13 и GPIOC мы можем обращаться к своему светодиоду через более понятные для восприятия CLOCK_LED_Pin и CLOCK_LED_GPIO_Port.

С тем — чем будем управлять — разобрались.

Теперь ищем функцию, которая умеет менять состояние нашего GPIO на противоположное.
Для этого в дереве проекта в левой части экрана — находим файл:

В нем очень много всего, но нам нужны описания функций, которые идут в блоке /* Exported functions */

Находим там функцию

Это как раз то, что нам необходимо.

Чтобы светодиод мигал постоянно — необходимо разместить вызов нашей функции в main в теле основного цикла программы.

А для того, чтобы различать мигания — добавить после этого задержку при помощи функции HAL_Delay(500);

В данном случае задержка будет 500мс.

Кстати, функция HAL_Delay описана так же в

только в файле stm32f1xx_hal.h
То есть чтобы помигать светодиодом — нам потребовалось написать всего 2 строчки кода.
Если мы сделали все правильно — можно попробовать запустить отладчик и посмотреть как выполняется программа.

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

Единственное, если вы не хотите наловить глюков при отладке — советую отключить оптимизацию. Делается это через меню Project -> Properties

Значение Optimization Level необходимо установить в None(-O0)

После остановки отладки — контроллер перезапустит код еще раз и будет выполнять его циклически.

По итогу должна получится примерно такая картина

Подведем итоги

Использование HAL позволило реализовать данную задачу путем написания всего 2-х строчек кода.

Но за упрощение работы пришлось заплатить памятью

1.54 КБ оперативы и 4.69 КБ флеша.

Напомню, оптимизация отключена, то есть «-O0»

Много это или мало?

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

Читайте также:  Wps office download linux

Источник

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 микроконтроллере.

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

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

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

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

Искать по ключевым словам 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). Разработчик, который занимается данным проектом — должен обладать хорошими или отличными знаниями периферии конкретного семейства МК. В идеале — при попытке разбудить его ночью — должен сразу же назвать адрес требуемого вектора из таблицы векторов прерываний.

Читайте также:  What is linux python

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

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

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

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

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

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

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

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

Драйвер ST-LINK V2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. В меню Project -> Rebuild Project
  2. Внизу выбрать вкладку Console
  3. При успешной сборке — должны получить надпись Build Finished

Источник

Оцените статью