Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
ob:o7:stm32f103 [2016/08/23 04:29] иван_денисов |
ob:o7:stm32f103 [2020/10/29 07:08] (текущий) |
====== Моя первая программа для STM32F103C8T6 ====== | ====== Моя первая программа для STM32 ====== |
| |
Урок посвящен созданию простой программы на языке Оберон с помощью компилятора [[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]]). При этом контроллер достаточно производительный для большинства несложных приложений. | Урок посвящен созданию простой программы на языке [[ob:oberon07|Oberon-07]] с помощью компилятора [[ob:o7|O7]]. |
| |
Для создания файла с прошивкой нам потребуется: написать код модулей нашей программы, скомпилировать модули и затем собрать полученные кодовые файлы в единый файл прошивки (с расширениями **bin** и **hex**). Рассмотрим эти действия по порядку. | Для этого урока используем плату с микроконтроллером **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 Написание простого модуля ===== | ===== 1 Написание простого модуля ===== |
| |
Компилятор [[ob:o7|O7]] распространяется вместе с набором полезных модулей, которые объединены в подсистему **Micro**. В этих модулях хранятся адреса регистров, процедуры инициализации контроллеров, заготовки для передачи данных по протоколу UART и многое другое. | Создайте новый документ для вашей программы через меню **File->New**. Минимальный код для модуля содержит слово `MODULE`, название, `END` и опять название, после которого следует точка. |
| |
| <code>MODULE MyBlink; |
| |
| END MyBlink.</code> |
| |
| Название модуля начинается с заглавной буквы и содержит две части. Первая часть --- название подсистемы, вторая --- название файла в этой подсистеме. Название файла также должно начинаться с заглавной буквы. |
| |
Чтобы использовать другие модули в вашей программе, их необходимо указать в секции `IMPORT`. При этом для них возможно присвоить более удобное короткое альтернативное имя через знак присваивания **:=**. | Чтобы использовать другие модули в вашей программе, их необходимо указать в секции `IMPORT`. При этом для них возможно присвоить более удобное короткое альтернативное имя через знак присваивания **:=**. |
После всех объявлений следует секция `BEGIN`, в которой описан код, выполняющийся при загрузке модуля. | После всех объявлений следует секция `BEGIN`, в которой описан код, выполняющийся при загрузке модуля. |
| |
<code oberon> | <code> |
MODULE MicroBlink; | MODULE MyBlink; |
| |
IMPORT SYSTEM, MCU := MicroSTM32F10xxD, PinCfg := MicroSTM32F10xPinCfg; | IMPORT SYSTEM, MCU := MicroSTM32F10xxD, PinCfg := MicroSTM32F10xPinCfg; |
SYSTEM.PUT(MCU.GPIOCBSRR, {13 + 16}) (* !~PC13 *) | SYSTEM.PUT(MCU.GPIOCBSRR, {13 + 16}) (* !~PC13 *) |
UNTIL FALSE | UNTIL FALSE |
END MicroBlink.</code> | END MyBlink.</code> |
| |
Мы пользуемся готовым модулем **PinCfg** для настройки параметров вывода **PC13**. А затем идет бесконечный цикл, который формирует периодическую смену состояния вывода **PC13** путем записи 13-го и 29-го бита в управляющий регистр **BSRR** для порта **C**. | Мы пользуемся готовым модулем **PinCfg** для настройки параметров вывода **PC13**. А затем идет бесконечный цикл, который формирует периодическую смену состояния вывода **PC13** путем записи 13-го и 29-го бита в управляющий регистр **BSRR** для порта **C**. |
| |
**BSRR** расшифровывается как Bit Set/Reset Register. Подробнее про все регистры вы найдете в файле [[http://www.st.com/resource/en/reference_manual/cd00171190.pdf|RM0008]] от фирмы ST. | **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**. | Для записи значений используется команда **SYSTEM.PUT**, которая записывает переменную типа **INTEGER** или **SET** по адресу регистра. Важно отметить, что для битовых операций в Обероне используется тип **SET**. Подробнее про работу с типом **SET** читайте в статье Витра [[http://oberoncore.ru/library/wirth_sets|SET: Недооцениваемый тип данных и его компиляция для ARM]]. |
| |
Подробнее про работу с типом SET читайте в статье Витра «[[http://oberoncore.ru/library/wirth_sets|SET: Недооцениваемый тип данных и его компиляция для ARM]]». | |
| |
===== 2 Компиляция ===== | ===== 2 Компиляция ===== |
| |
Для сборки надо указать целевой микроконтроллер в команде для сборки. | Для сборки надо указать целевой микроконтроллер в команде для сборки. |
^Q O7ARMv7MLinker.Link STM32F103C8 MicroBlink | ^Q O7ARMv7MLinker.Link STM32F103C8 MyBlink |
| |
| После нажатия на такой коммандер, в папке **My/Files** появятся файлы **Blink.bin** и **Blink.hex**. |
| |
| Файлы исходных кодов прошивок также лучше хранить в папке **My/Files**. |
| |
| Про то, как прошить полученным файлом микроконтроллер, читайте в статье «[[ob:o7:stm32flash|Прошивка микроконтроллера через UART]]». |
| |
| {{ :ob:o7:o7demo.png?direct&600 |}} |
| |
После нажатия на такой коммандер, в папке **Micro/Files** появятся файлы **Blink.bin** и **Blink.hex**. | |
| |
Про то, как прошить полученным файлом контроллер, читайте в статье «[[ob:o7:stm32flash|Прошивка микроконтроллера через UART]]». | ---- |
| |
| Автор заметки: [[http://iadenisov.ru|И.А. Денисов]] |