Это старая версия документа!
Урок посвящен созданию простой программы на языке Оберон с помощью компилятора O7. Для этого урока используем плату с микроконтроллером STM32F103C8T6 на основе архитектуры ARM Cortex M3. Этот микроконтроллер выбран в связи с доступностью очень недорогих отладочных плат на его основе (ebay.com, au.ru, avito.ru). При этом контроллер достаточно производительный для большинства несложных приложений.
Для создания файла с прошивкой нам потребуется: написать код модулей нашей программы, скомпилировать их и затем уже собрать кодовые файлы модулей в единый файл прошивки (с расширениями bin и hex). Рассмотрим эти действия по порядку.
Компилятор O7 распространяется вместе с набором полезных модулей, которые объединены в подсистему Micro. В этих модулях хранятся адреса регистров, процедуры инициализации контроллеров, заготовки для передачи данных по протоколам UART и многое другое.
Чтобы использовать другие модули в вашей программе их необходимо указать в секции `IMPORT`. При этом возможно присвоить более удобное короткое альтернативное имя через знак присваивания :=.
После секции импорта идет объявление констант `CONST`, глобальных переменных `VAR` (их нет в этом примере) и процедур. В примере ниже добавляется одна процедура, которая обеспечивает задержку путем рутиной операции вычитания единицы `DEC`.
После всех объявлений идет секция `BEGIN`, в которой описан код, выполняющийся при загрузке этого модуля.
MODULE MicroSTM32F103x8Test1; IMPORT SYSTEM, MCU := MicroSTM32F10xxD, PinCfg := MicroSTM32F10xPinCfg; CONST sleepTime = 800000; (* ~ 1 sec @ Thumb-16 *) PROCEDURE Sleep (x: INTEGER); BEGIN REPEAT DEC(x) UNTIL x = 0 END Sleep; BEGIN PinCfg.Configure(PinCfg.C, 13, PinCfg.outputPushPull2MHz); REPEAT Sleep(sleepTime); SYSTEM.PUT(MCU.GPIOCBSRR, {13}); (* !PC13 *) Sleep(sleepTime); SYSTEM.PUT(MCU.GPIOCBSRR, {13 + 16}) (* !~PC13 *) UNTIL FALSE END MicroSTM32F103x8Test1.
Мы пользуемся готовым модулем PinCfg для настройки параметров вывода PC13. А затем идет бесконечный цикл, который формирует периодическую смену состояния вывода PC13 путем записи 13-го и 29 бита в управляющий регистр BSRR для порта C.
BSRR расшифровывается как Bit Set/Reset Register. Подробнее про все регистры вы найдете в файле RM0008 от фирмы ST.
Для записи значений используется команда SYSTEM.PUT, которая записывает переменную типа INTEGER или SET по адресу регистра. Важно отметить, что для битовых операций в Обероне используется тип SET.
Подробнее про работы с ним читайте в статье Витра «SET: Недооцениваемый тип данных и его компиляция для ARM».
Чтобы откомпилировать модуль, выберите в меню O7→ARMv7M Compile.
Либо после окончания модуля удобно вставить такую команду.
⬤ O7ARMv7MP.Compile @/s
Черный кружок тут обозначает специальный символ комм́андера, который в вашем коде необходимо добавить через меню Tools→Insert Commander. Комм́андер — это небольшая кнопка, нажатие на которую запускает команду после нее.
Для сборки надо указать целевой микроконтроллер в команде для сборки.
⬤ O7ARMv7MLinker.Link STM32F103C8 MicroSTM32F103x8Test1
После нажатия на такой коммандер в папке Micro/Files появятся файлы с расширением bin и hex.
Про то, как прошить полученным файлом контроллер, читайте в статье «Прошивка микроконтроллера через UART».