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 # семь итераций