Инструменты пользователя

Инструменты сайта


ob:o7:stm32f103

Это старая версия документа!


Моя первая программа для STM32F103C8T6

Урок посвящен созданию простой программы на языке Оберон с помощью компилятора O7. Для этого урока используем плату с микроконтроллером STM32F103C8T6 на основе архитектуры ARM Cortex M3. Этот микроконтроллер выбран в связи с доступностью очень недорогих отладочных плат на его основе (ebay.com, au.ru, avito.ru). При этом контроллер достаточно производительный для большинства несложных приложений.

Для создания файла с прошивкой нам потребуется: написать код модулей нашей программы, скомпилировать модули и затем собрать полученные кодовые файлы в единый файл прошивки (с расширениями bin и hex). Рассмотрим эти действия по порядку.

1 Написание простого модуля

Компилятор O7 распространяется вместе с набором полезных модулей, которые объединены в подсистему Micro. В этих модулях хранятся адреса регистров, процедуры инициализации контроллеров, заготовки для передачи данных по протоколу UART и многое другое.

Создайте новый документ для вашей программы через меню File→New. Минимальный код для модуля содержит слово `MODULE`, название, `END` и опять название, после которого следует точка.

MODULE MicroBlink;
 
END MicroBlink.

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

Чтобы использовать другие модули в вашей программе, их необходимо указать в секции `IMPORT`. При этом для них возможно присвоить более удобное короткое альтернативное имя через знак присваивания :=.

После секции импорта идет объявление констант `CONST`, глобальных переменных `VAR` (их нет в этом примере) и процедур. В примере ниже добавляется одна процедура, которая обеспечивает задержку путем рутиной операции вычитания единицы `DEC`.

После всех объявлений следует секция `BEGIN`, в которой описан код, выполняющийся при загрузке модуля.

MODULE MicroBlink;
 
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 MicroBlink.

Мы пользуемся готовым модулем PinCfg для настройки параметров вывода PC13. А затем идет бесконечный цикл, который формирует периодическую смену состояния вывода PC13 путем записи 13-го и 29-го бита в управляющий регистр BSRR для порта C.

BSRR расшифровывается как Bit Set/Reset Register. Подробнее про все регистры вы найдете в файле RM0008 от фирмы ST.

Для записи значений используется команда SYSTEM.PUT, которая записывает переменную типа INTEGER или SET по адресу регистра. Важно отметить, что для битовых операций в Обероне используется тип SET.

Подробнее про работу с типом SET читайте в статье Витра «SET: Недооцениваемый тип данных и его компиляция для ARM».

2 Компиляция

Чтобы откомпилировать модуль, выберите в меню O7→ARMv7M Compile.

Либо после окончания модуля удобно вставить такую команду.

^Q O7ARMv7MP.Compile @/s

^Q тут обозначает специальный символ комма́ндера, который в вашем коде необходимо добавить через меню Tools→Insert Commander. Комма́ндер — это небольшая кнопка, нажатие на которую запускает команду после нее.

3 Сборка

Для сборки надо указать целевой микроконтроллер в команде для сборки.

^Q O7ARMv7MLinker.Link STM32F103C8 MicroBlink

После нажатия на такой коммандер, в папке Micro/Files появятся файлы Blink.bin и Blink.hex.

Про то, как прошить полученным файлом контроллер, читайте в статье «Прошивка микроконтроллера через UART».

ob/o7/stm32f103.1471916641.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)