Как записать программу на контроллер

Допустим, копая просторы Интернета, нашли мы очень интересное электронное устройство на микроконтроллере STM32, причем и все схемы, и прошивка прилагается. Но вот незадача, никогда мы не занимались загрузкой прошивки в STM32, раньше работали только с AVR-ками. Не беда! В этой статье мы разберемся в этом вопросе, ведь загружать готовую прошивку в STM32 не сложнее, чем в старые добрые AVR-ки, а может даже и проще! Итак, поехали! Предыдущая статья здесь, все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.

Программатор

В предыдущей части мы познакомились с несколькими вариантами программатора ST-Link. В данном примере в качестве программатора я буду использовать отладочную плату stm32f4discovery, просто потому, что она у меня есть. Для того, чтобы использовать эту отладочную плату в качестве программатора, нужно сделать 2 вещи:

  1. Снять перемычки, соединяющие линии программирования встроенного ST-Link-а с микроконтроллером, распаянным на плате
  2. С помощью гребенки, на которую выведена шина SWD, подключить сигнальные линии программатора к внешнему микроконтроллеру

На картинке, приведенной далее, показана распиновка разъема SWD:

Программирование ПЛК. 8. Подключение контроллера и первая программа.

На китайских отладочных платах с микроконтроллером stm32f103c8 имеется соответствующий разъем, через который можно загрузить прошивку в МК. Эти платы выглядят примерно так:

Пины на разъеме программирования подписаны как GND, CLK, DIO, 3V3. Соединение с программатором выполняется вот таким образом:

  • GND — GND
  • CLK — SWCLK
  • DIO — SWDIO

У меня макеты выглядят вот так:

В данном случае отладочная плата с stm32f103c8 припаяна к «решету», на котором соединена с остальными компонентами на обратной стороне проводом в изоляции. Таким же проводом выполнено подключение программатора к отладочной плате:

Софт

Перейдем теперь к программной составляющей. Нам понадобится драйвер для программатора и управляющая софтина, через через которую мы будем загружать прошивку в микроконтроллер. Для этого нам нужно на официальном сайте www.st.com скачать пакет STM32 ST-LINK utility. А что нужно сделать перед скачиванием чего-нибудь с www.st.com? Правильно!

Надо у них зарегистрироваться.

[Шуточка про «нельзя просто так взять и скачать что-то с st.com»]

Кину ссылку на архив в конце статьи.

Итак, мы добыли архив с пакетом STM32 ST-LINK Utility. После установки подключаем программатор к ПК по USB и подключаем питание к отладочной плате. Если драйвера на программатор не установились автоматически, то идем в диспетчер устройств, там находим наш STM32 STLink, выбираем Обновить драйвер->Выполнить поиск на этом компьютере. После этого все должно заработать. Затем, из меню «Пуск» запускаем программу «STM32 ST-LINK Utility«:

Основы программирования контроллеров за 5 минут

Выглядит интерфейс ST-LINK Utility вот так:

Далее, нам необходимо произвести небольшие настройки. В меню выбираем Target->Settings…

Открывается вот такое окошко:

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

«Подключиться к микроконтроллеру» — выполняет подключение программатора к МК. При этом работа прошивки останавливается. После этого можно выполнять дальнейшие манипуляции с flash-памятью МК.

«Отключиться от микроконтроллера» — после того, как мы все сделали, нажимаем на эту кнопку и SL-Link отключается от МК, при этом запускается загруженная во flash-память прошивка.

«Очистить чип» — при нажатии на эту кнопку стирается вся flash-память микроконтроллера. Это необходимо делать перед загрузкой другой прошивки в МК.

Для того, чтобы прошить наш .hex или .bin файл в МК нужно сделать следующее. В меню выбираем Target->Programm…

После этого у нас открывается окошко выбора файла прошивки. Выбираем нужный нам файл, после чего появляется вот такое окно:

Здесь нам нужно нажать Start чтобы запустить процесс. После того, как прошивка была загружена в МК, нажимаем на кнопку «Отключиться от микроконтроллера«.

Те, кто раньше работал с микроконтроллерами AVR знают о такой вещи как фьюз-биты. Если в AVR-ках неправильно их выставить, то прошивка может работать некорректно. Для вас хорошая новость: в STM32 фьюз-битов нет! Достаточно просто залить в МК файл с управляющей программой и все будет работать.

Ну что ж, на этом, пожалуй, закончу, всем кто дочитал, спасибо за внимание Продолжение тут

Ссылки

Драйвер и софт для ST-Link: STM32 ST-LINK utility

Источник: dimoon.ru

Обзор визуальных средств программирования микроконтроллеров (часть 1)

Александр Григорьев

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

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

Читайте также:
Как участвовать в программе поддержки малого бизнеса

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

  1. Возможность работы с универсальными микроконтроллерами, а не только лишь с частными специализированными контроллерами. В первую очередь нас интересует Arduino Uno как самый распространённый и доступный контроллер на сегодняшний день, во вторую – BBC Micro:bit как представитель универсальных образовательных микроконтроллеров будущего.
  2. Мгновенный отклик при создании программ. Ребенок должен иметь возможность сразу увидеть, что произойдёт, если записать логическую единицу в порт, либо выполнить какую-либо иную команду (без необходимости ждать, пока откомпилируется и загрузится программа). Особенно это важно на начальных этапах обучения. Реализована данная возможность может быть несколькими способами.
  1. Работа в интерактивном режиме с предварительной загрузкой специальной прошивки на микроконтроллер. Сама программа при этом остаётся работающей на компьютере, а прошивка лишь исполняет полученные от него команды. Данный вариант имеет множество достоинств, так как в результате нам становится доступной многозадачность, управление дополнительными игровыми персонажами (спрайтами Scratch) и т.д. Но существенным недостатком является значительное время отклика системы на изменение условий. Сигнал от датчика вначале должен добраться до компьютера, после этого компьютер определит необходимое управляющее воздействие, и лишь спустя какое-то время обратный сигнал возвратится к устройству. В данном обзоре мы будем сравнивать время реакции системы при использовании разных программных сред.
  2. Работа с микроконтроллерами, которые интерпретируют программы, написанные на языках высокого уровня. В данном случае компилировать программу не требуется, её загрузка в память контроллера происходит очень быстро, в некоторых случаях прямо в процессе создания.
  3. Поддержка программной эмуляции работы устройства. Можно посмотреть, как (предположительно) будет работать реальное устройство, исполняя написанный код, проверить всё на эмуляторе вместо того, чтобы загружать в устройство на самом деле.

Пару лет назад всем перечисленным выше требованиям соответствовала лишь одна единственная программная среда – mBlock for PC, разработка компании Makeblock, а также, с некоторой натяжкой, Snap4arduino. Менее года назад на сцене появились другие программные продукты, но они поначалу были весьма сырыми, демонстрировали недостаточную производительность и функциональность. Сегодня уже можно сказать, что у программы mBlock есть серьёзные конкуренты. Однако у каждого продукта существуют свои достоинства и недостатки.

Итак, список рассматриваемых сегодня программных средств.

  1. mBlock v.3.4.11
  2. mBlock v.5.0.0 RC
  3. Snap4arduino v.1.2.7
  4. MindPlus v.1.2.1
  5. KittenBlock v.1.8.1
  6. MakeCode for Micro:bit (v. 1.2.13 / 4.4.7 / 2.1.1 )
  7. MicroBlocks v.0.1.27 (alpha)

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

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

Мгновен­ный отклик, (скорость)

Автоном­ные прог­раммы, функцио­нальность

Подготовка контрол­лера, смена режимов работы

Свои блоки кода

Загрузка в редактор

Arduino Uno, Nano, Leonardo, Mega 2560

Интерак­тивный режим,
R — 14.4
W — 14.4
I — 16

Arduino Uno, Mega 2560;
Micro:bit

Все клас­сичес­кие платы от Arduino Uno до Due

Интерак­тивный режим,
R — 86
W — 28.6
I — 41

Arduino Uno, Nano, Leonardo; Micro:bit

Интерак­тивный режим,
R — 18
W — 4.4
I — 7

Arduino Uno, Nano, Pro, Mega 2560, LGT; Micro:bit

Интерак­тивный режим (UNO-совм.),
R — 15.1
W- 146(?!)
I — 22

Micro:bit,
Adafruit CPE

Micro:bit,
Adafruit CPE, Arduino Due, ESP8266, ESP32 и др. 32-bit

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

Несколько слов о процедуре тестирования. В программных средах mBlock3, Snap4arduino, KittenBlock и MindPlus были написаны одинаковые скрипты, позволяющие замерить производительность. В таблице представлены результаты по трём показателям.

Первый показатель – количество циклов чтения значений двух аналоговых портов (A0 и A1) за 1 секунду. Скрипт отображает показания за 10 секунд тестирования, для занесения в таблицу эти результаты были поделены на 10. Если трансформировать скрипт таким образом, чтобы запрашивалось значение лишь одного порта, показания удвоятся.

Второй показатель – количество циклов записи в порт за 1 секунду с переключением в состояние HIGH и обратно в LOW. Если говорить проще, сколько раз за 1 секунду можно мигнуть лампочкой (в теории, на практике всё оказалось несколько сложнее, но об этом позже).

Третий – максимальное количество переключений состояния за 1 секунду при автоколебаниях, интегральный показатель реального быстродействия системы с отрицательной обратной связью. Для замера значений пришлось собрать простой испытательный стенд: к порту 13 подключен светодиод, а к порту A0 – фоторезистор. Когда светодиод не горит, освещённость ниже критической, система даёт команду включить светодиод. Когда светодиод горит, освещённость выше критической, система даёт команду выключить светодиод. В случае использования простого релейного регулятора возникают автоколебания, точно такие же, как при использовании релейного регулятора в алгоритме движения робоплатформы с одним датчиком по границе линии.

Читайте также:
Как на одном компе запустить две программы

Перейдём к рассмотрению программных продуктов и их особенностей.

MicroBlocks v.0.1.27 (alpha)

MicroBlocks

На мой взгляд, самый перспективный для использования в учебном процессе и самый ожидаемый лично мной программный продукт. К сожалению, пока еще находится на стадии альфа-тестирования, и самое главное ограничение заключается в том, что беспроблемно устанавливается лишь среда на базе GeneralPurposeBlocks, не позволяющая работать дополнительно со спрайтами и со сценой (stand-alone system). Программная среда на базе “Snap!” всё ещё разрабатывается, хотя в Youtube есть впечатляющие ролики, демонстрирующие её работу. Но даже в существующем виде это уже вполне серьёзный продукт, который годится для использования во многих случаях, и обладает совершенно уникальными особенностями.

Поддерживается Micro:bit и множество других 32-разрядных микроконтроллеров, их список непрерывно растёт. К сожалению, производительности классических Arduino Uno и Mega 2560 недостаточно для работы виртуальной машины MicroBlocks, но 8-разрядные микроконтроллеры сегодня всё ещё актуальны, а завтра уже станут архаизмом.

Как сказано выше, пока ещё нет возможности работать в интерактивном режиме и создавать игровые проекты. Но «интерактивность» в понимании «мгновенный отклик» микропроцессора уже существует. Да еще какая! Можно щёлкнуть по блоку и сразу же увидеть, как он сработал, например, появилось изображение на светодиодной матрице. И если запустить программу, все изменения при её редактировании тут же будут влиять на работу устройства!

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

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

Смена режимов работы не предусмотрена, в данном случае это один и тот же режим, а подготовка платы к использованию предполагает загрузку на неё специальной прошивки, виртуальной машины MicroBlocks. Для разных плат этот процесс осуществляется с разной степенью удобства и требует разной квалификации. Контроллер Micro:bit без проблем прошивается непосредственно из программной среды.

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

MakeCode for Micro:bit

MakeCode

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

Поддерживает программирование лишь избранных продуктов, среди которых есть Lego Mindstorms EV3, игра Minecraft, а также симпатичный и необычный робот Wonder Cue (весьма разношёрстная подборка). Но нас сейчас интересует Adafruit Circuit Playground Express, и главное, BBC Micro:bit. По сути, в настоящий момент MakeCode – самое полнофункциональное и проработанное средство создания программ автономной работы для платы Micro:bit.

Запускается из браузера, но для операционной системы MS Windows 10 с официального сайта можно скачать дистрибутив версии, работающей без интернет-подключения. Забегая вперёд скажем, что подобный дистрибутив существует и для операционной системы Windows 7.

Специальная подготовка контроллера не нужна. Но ценой этому будет то, что удобство загрузки подготовленной программы на плату оставляет желать лучшего. Реальной интерактивности, такой, как при использовании MicroBlocks, нет и в помине. Зато существует очень забавный симулятор платы Micro:bit. И страшно даже подумать, сколько сил и времени потратили разработчики на его создание.

По мере сборки графического скрипта виртуальная плата Micro:bit, изображение которой находится сбоку, будет реагировать на наши действия: отображать текст и смайлики на светодиодной матрице, запускать подключенные периферийные устройства и т.д. Всё это позволяет использовать MakeCode для обучения даже в том случае, если реальной платы Micro:bit у нас нет, либо она единственная на весь учебный класс.

Насколько я знаю, средой MakeCode поддерживаются все существующие возможности платы Micro:bit, включая самую главную — запуск нескольких параллельных процессов. Кроме того, теперь для Micro:bit существует огромное количество всевозможных плат расширений, позволяющих подключать практически любые датчики, коллекторные и шаговые двигатели, и прочую периферию. Разработчики этих плат, как правило, не придумывают собственную визуальную среду программирования, а просто предоставляют расширение для MakeCode с дополнительными графическими блоками (правда, в некоторых случаях они всё-таки делают и то, и другое).

На информацию о том, как создавать собственные визуальные блоки с текстовым кодом (такие как в среде Espruino Web IDE, см. на рисунке ниже) и собственные расширения, я пока не натыкался, но данная возможность наверняка существует.

Визуальные блоки с текстовым кодом в Espruino Web IDE

Среда MakeCode подходит для изучения языка JavaScript. Одним щелчком мыши можно переключиться на вкладку с текстовым кодом, посмотреть, как выглядит графическая программа после трансляции, при желании внести коррективы и загрузить в контроллер.

Читайте также:
Toyota easy программа как работает

Недостаток у MakeCode тот же самый, что у MicroBlocks на базе GeneralPurposeBlocks: отсутствие спрайтов и сцены, невозможность создавать игры, использующие подключенное устройство как игровой пульт.

Зато это позволяют сделать некоторые другие программные продукты, которые в связи с объемностью материала нам придется рассмотреть в следующей публикации.

Источник: novator.team

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

Контроллер скорости (штука для управления тягой винтов) сыграл мелодию при старте, как это любят делать пилоты дронов, которые часто используют полётный контроллер Betaflight. Неужели там бета-флайт? Похоже, что да. Ну, или какая-то из ее разновидностей — открытых полетных контроллеров всего около полдюжины.

Перед глазами побежали флешбеки, где-то из глубин подсознания всплыла забытая уже информация о прошивках для Тойоты на миллионы тысяч строк Си и 2 тысячи глобальных переменных (Toyota: 81564 ошибки в коде).

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

Но ведь можно иначе? Можно, решили мы!

И решили это доказать. На Avito был куплен акробатический FPV-“квадрик” на базе STM32F405, для отладки — Discovery-плата для этого же контроллера, а дальше все как в тумане..

Так как же быть иначе?

После быстрого совещания возникли вот такие мысли:

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

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

При выборе языка мы поставили себе вот какие требования:

  • это должно быть что-то близкое к embedded
  • Нам нужен хороший богатый runtime с возможностями RTOS, но при этом брать и интегрировать RTOS не хочется
  • Он не должен заметно уступать в производительности тому, что используется сейчас.

Оказалось, что из практических инструментов в эти требования хорошо подходит один очень старый, незаслуженно забытый инструмент. Да, это Ada. А точнее, его модерновое, регулярно обновляемое ядро SPARK. В [SRM] описаны основные отличия SPARK от Ada, их не так много.

Что такое SPARK, будет ясно дальше, мы покажем, как именно оно было применено, почему Ада понравилась больше, чем С, как работает прувер, и почему мы при этом ничего не потеряли, а только приобрели. И почему мы не взяли Rust.

Иной подход

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

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

В случае с SPARK, верификация базово предоставляет нам гарантии:

  • отсутствия переполнения массивов и переменных
  • отсутствия выхода за границы в типах и диапазонах
  • отсутствия разыменования null-указателей
  • отсутствие выброса исключений.
  • гарантию неприменения инструментов, проверку которых выполнить нельзя.
  • гарантию выполнения всех инвариантов, которые мы опишем. А опишем мы много!Круто, да?

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

SPARK также учитывает ограничения на типы, которые описаны в Ada. В случае обычного исполнения ошибка несоответствия типов упадет в Runtime; SPARK же позволяет статически доказать, что ограничения на типы не могут быть нарушены никаким потоком исполнения.

Или другой пример:

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

Отдельный плюс SPARK в том, что система позволяет “натягивать” гарантии на программу поэтапно, то есть программа может быть частично верифицированной. То есть часть модулей можно объявить верифицируемыми, а часть — (пока) нет.

Сам SPARK делит верификацию на уровни: от «каменного» (Stone level) через «Бронзовый» и «Серебряный» уровни до «Золотого» (Gold) и «Платинового». Каждый из уровней усиливает гарантии:

Stone Мы в принципе знаем, что есть SPARK
Bronze Stone + верификация потоков исполнения и детерминизм/отсутствие неинициализированных переменных
Silver Bronze + доказательное отсутствие runtime-ошибок
Gold Silver + гарантии целостности — не-нарушения инвариантов локальных и глобальных состояний
Platinum Gold + гарантия функциональной целостности
Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru