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

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


ob:o7:stm32f103

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

ob:o7:stm32f103 [2017/04/06 23:32]
иван_денисов
ob:o7:stm32f103 [2018/11/30 01:13]
Строка 1: Строка 1:
-====== Моя первая программа для STM32 ====== 
  
-Урок посвящен созданию простой программы на языке [[ob:oberon07|Oberon-07]] с помощью компилятора [[ob:o7|O7]].  
- 
-Для этого урока используем плату с микроконтроллером **STM32F103C8T6** на основе архитектуры ARM Cortex M3. Этот микроконтроллер выбран в связи с доступностью очень недорогих отладочных плат на его основе ([[http://www.ebay.com/sch/i.html?_nkw=STM32F103C8T6|ebay.com]], [[https://au.ru/auction/?find_str=STM32F103C8T6|au.ru]], [[https://www.avito.ru/rossiya?q=STM32F103C8T6|avito.ru]]). При этом контроллер достаточно производительный для большинства несложных приложений, а также [[http://milandr.ru/index.php?mact=Products,cntnt01,default,0&cntnt01hierarchyid=5&cntnt01returnid=67|имеет российский аналог]]. 
- 
-Для создания файла с прошивкой нам потребуется: 
-  - написать код модулей нашей программы, 
-  - скомпилировать модули, 
-  - собрать полученные кодовые файлы в единый файл прошивки (с расширениями **bin** и **hex**). 
- 
-Рассмотрим эти действия по порядку. 
- 
-===== 1 Написание простого модуля ===== 
- 
-Создайте новый документ для вашей программы через меню **File->New**. Минимальный код для модуля содержит слово `MODULE`, название, `END` и опять название, после которого следует точка. 
- 
-<code>MODULE MyBlink; 
- 
-END MyBlink.</code> 
- 
-Название модуля начинается с заглавной буквы и содержит две части. Первая часть --- название подсистемы, вторая --- название файла в этой подсистеме. Название файла также должно начинаться с заглавной буквы. 
- 
-Чтобы использовать другие модули в вашей программе, их необходимо указать в секции `IMPORT`. При этом для них  возможно присвоить более удобное короткое альтернативное имя через знак присваивания **:=**. 
- 
-После секции импорта идет объявление констант `CONST`, глобальных переменных `VAR` (их нет в этом примере) и процедур. В примере ниже добавляется одна процедура, которая обеспечивает задержку путем рутиной операции вычитания единицы `DEC`. 
- 
-После всех объявлений следует секция `BEGIN`, в которой описан код, выполняющийся при загрузке модуля. 
- 
-<code> 
-MODULE MyBlink; 
- 
-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 MyBlink.</code> 
- 
-Мы пользуемся готовым модулем **PinCfg** для настройки параметров вывода **PC13**. А затем идет бесконечный цикл, который формирует периодическую смену состояния вывода **PC13** путем записи 13-го и 29-го бита в управляющий регистр **BSRR** для порта **C**. 
- 
-**BSRR** расшифровывается как Bit Set/Reset Register. Первые 16 битов отвечают за подачу напряжения на пин, а с 16 по 31 — за сброс напряжения. Преимущество использования одного регистра связано с тем, что вы можете установить один пин, и сбросить другой за одну операцию с гарантией, что между операциями сброса и установки не будет вызова прерываний, которые могут сформировать нежелательную задержку. Более подробную информацию про все регистры вы найдете в руководстве [[http://www.st.com/resource/en/reference_manual/cd00171190.pdf|RM0008]] от фирмы ST. 
- 
-Для записи значений используется команда **SYSTEM.PUT**, которая записывает переменную типа **INTEGER** или **SET** по адресу регистра. Важно отметить, что для битовых операций в Обероне используется тип **SET**. Подробнее про работу с типом **SET** читайте в статье Витра [[http://oberoncore.ru/library/wirth_sets|SET: Недооцениваемый тип данных и его компиляция для ARM]]. 
- 
-===== 2 Компиляция ===== 
- 
-Чтобы откомпилировать модуль, выберите в меню **O7->ARMv7M Compile**. 
- 
-Либо после окончания модуля удобно вставить такую команду. 
- ^Q O7ARMv7MP.Compile @/s 
-**^Q** тут обозначает специальный символ комма́ндера, который в вашем коде необходимо добавить через меню **Tools->Insert Commander**. Комма́ндер --- это небольшая кнопка, нажатие на которую запускает команду после нее. 
- 
-===== 3 Сборка ===== 
- 
-Для сборки надо указать целевой микроконтроллер в команде для сборки. 
- ^Q O7ARMv7MLinker.Link STM32F103C8 MyBlink 
- 
-После нажатия на такой коммандер, в папке **My/Files** появятся файлы **Blink.bin** и **Blink.hex**. 
- 
-Файлы исходных кодов прошивок также лучше хранить в папке **My/Files**. 
- 
-Про то, как прошить полученным файлом микроконтроллер, читайте в статье «[[ob:o7:stm32flash|Прошивка микроконтроллера через UART]]». 
- 
-{{ :ob:o7:o7demo.png?direct&600 |}} 
- 
- 
----- 
- 
-Автор: И.А. Денисов 
ob/o7/stm32f103.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)