stm32 basic - el-pths/w GitHub Wiki

Система для программирования микроконтроллеров STM32

Введение

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

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

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

Недостатки Arduino (для нас)

Ардуино программируются на языке C, что не радует тех, кто не слишком дружен с программированием. Возможно, легче воспринимался бы какой-либо диалект языка Basic (язык для непрограммистов).

Ардуино в основном работают с 8-битными контроллерами, что по нашим временам уже несерьезно. Ардуино на 32-битных платформах стоят неоправданно дорого и используют редкие, непопулярные микроконтроллеры, что значительно снижает пользу от них.

Для программирования Arduino нужен компьютер со средой Arduino IDE (включающей компилятор с языка Си)

Пожелания к альтернативной системе

Мы хотим изобрести платформу которая в какой-то мере поможет справиться с описанными выше недостатками:

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

В качестве контроллера возьмем например STM32F103 - с 20 килобайтами оперативной памяти (вместо ардуиновских 2) и 72 МГц тактовой частотой (вместо 16). При этом он стоит дешевле чипов AtMega32 использующихся в ардуинах.

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

Организационные замечания

Этот проект требует определенных усилий. Но зато он ограничен по объему. Это означает, что если его выбрать в качестве практики, и сделать достаточно быстро - то в дальнейшем останется только написать отчет. В частности это означает 4 свободных часа в неделю в школьном расписании, что актуально для выпускников.

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

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


Тестовое Задание

Настоятельно рекомендуется попробовать следующее задание, чтобы оценить свои навыки и решить, интересно ли заниматься подобным проектом.

Сейчас мы опишем очень простой язык программирования (назовем его ВЖУХ). Требуется создать интерпретатор для него (на вашем любимом языке программирования - Java, C, Python), который считывает программу из файла и выполняет ее. После этого нужно на нашем изобретенном языке написать код, который выполняет некоторое несложное вычисление (см ниже.)

Описание языка ВЖУХ

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

Переменные обозначаются одиночными буквами латинского алфавита, то есть всего переменных не более 26. Их значения - целые числа.

Операции могут быть такими:

  • INPUT X - позволяет пользователю ввести число в переменную X (с консоли)
  • PRINT X - печатает значение переменной X (на консоль)
  • X = Y * Z - осуществляет бинарную операцию над значениями Y и Z, результат записывает в переменную X; символ операции может быть +, -, *, /, %; каждое из значений может быть либо переменной, либо числом; кроме того второй операнд (и оператор) могут отсутствовать (если нужно просто записать число в переменную).
  • END - заканчивает выполнение программы
  • GOTO label - отыскивает строку с меткой label, дальнейшее выполнение программы продолжается со строки следующей за меткой
  • IF X THEN label - проверяет значение переменной X, если оно не 0, то выполнение переходит на метку label (т.е. как GOTO, но только если X не 0)

Строка с меткой выглядит как любая буквенная последовательность оканчивающаяся двоеточием (например HERE:).

Пример программы, печатающей первые десять "треугольных" чисел:

X = 1
NEXT:
Y = X + 1
Z = X * Y
Z = Z / 2
PRINT Z
X = X + 1
S = X - 11
IF S THEN NEXT
END

В этой программе есть одна метка NEXT с помощью которой устроен цикл.

Задача на языке ВЖУХ

После того, как интерпретатор языка запрограммирован, нужно его потестировать. Предлагается написать на языке ВЖУХ такую программу (см. гипотеза Коллатца):

  • у пользователя запрашивают начальное число;
  • дальше это число преобразуется по нижеописанным правилам, пока не станет единицей;
  • если текущее число нечетное - его надо умножить на 3 и прибавить 1;
  • иначе (для четного числа) его нужно разделить на 2;
  • программа должна выводить количество итераций, потребовавшихся для достижения единицы.

Например, для исходного числа 3 получаем последовательность:

3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1   # семь итераций