Показаны различия между двумя версиями страницы.
|
ob:o7:stm32f103 [2018/11/30 01:13] |
ob:o7:stm32f103 [2020/10/29 07:08] (текущий) |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Моя первая программа для STM32 ====== | ||
| + | Урок посвящен созданию простой программы на языке [[ob: | ||
| + | |||
| + | Для этого урока используем плату с микроконтроллером **STM32F103C8T6** на основе архитектуры ARM Cortex M3. Этот микроконтроллер выбран в связи с доступностью очень недорогих отладочных плат на его основе ([[http:// | ||
| + | |||
| + | Для создания файла с прошивкой нам потребуется: | ||
| + | - написать код модулей нашей программы, | ||
| + | - скомпилировать модули, | ||
| + | - собрать полученные кодовые файлы в единый файл прошивки (с расширениями **bin** и **hex**). | ||
| + | |||
| + | Рассмотрим эти действия по порядку. | ||
| + | |||
| + | ===== 1 Написание простого модуля ===== | ||
| + | |||
| + | Создайте новый документ для вашей программы через меню **File-> | ||
| + | |||
| + | < | ||
| + | |||
| + | END MyBlink.</ | ||
| + | |||
| + | Название модуля начинается с заглавной буквы и содержит две части. Первая часть --- название подсистемы, | ||
| + | |||
| + | Чтобы использовать другие модули в вашей программе, | ||
| + | |||
| + | После секции импорта идет объявление констант `CONST`, глобальных переменных `VAR` (их нет в этом примере) и процедур. В примере ниже добавляется одна процедура, | ||
| + | |||
| + | После всех объявлений следует секция `BEGIN`, в которой описан код, выполняющийся при загрузке модуля. | ||
| + | |||
| + | < | ||
| + | MODULE MyBlink; | ||
| + | |||
| + | IMPORT SYSTEM, MCU := MicroSTM32F10xxD, | ||
| + | |||
| + | 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, | ||
| + | REPEAT | ||
| + | Sleep(sleepTime); | ||
| + | SYSTEM.PUT(MCU.GPIOCBSRR, | ||
| + | Sleep(sleepTime); | ||
| + | SYSTEM.PUT(MCU.GPIOCBSRR, | ||
| + | UNTIL FALSE | ||
| + | END MyBlink.</ | ||
| + | |||
| + | Мы пользуемся готовым модулем **PinCfg** для настройки параметров вывода **PC13**. А затем идет бесконечный цикл, который формирует периодическую смену состояния вывода **PC13** путем записи 13-го и 29-го бита в управляющий регистр **BSRR** для порта **C**. | ||
| + | |||
| + | **BSRR** расшифровывается как Bit Set/Reset Register. Первые 16 битов отвечают за подачу напряжения на пин, а с 16 по 31 — за сброс напряжения. Преимущество использования одного регистра связано с тем, что вы можете установить один пин, и сбросить другой за одну операцию с гарантией, | ||
| + | |||
| + | Для записи значений используется команда **SYSTEM.PUT**, | ||
| + | |||
| + | ===== 2 Компиляция ===== | ||
| + | |||
| + | Чтобы откомпилировать модуль, | ||
| + | |||
| + | Либо после окончания модуля удобно вставить такую команду. | ||
| + | ^Q O7ARMv7MP.Compile @/s | ||
| + | **^Q** тут обозначает специальный символ комма́ндера, | ||
| + | |||
| + | ===== 3 Сборка ===== | ||
| + | |||
| + | Для сборки надо указать целевой микроконтроллер в команде для сборки. | ||
| + | ^Q O7ARMv7MLinker.Link STM32F103C8 MyBlink | ||
| + | |||
| + | После нажатия на такой коммандер, | ||
| + | |||
| + | Файлы исходных кодов прошивок также лучше хранить в папке **My/ | ||
| + | |||
| + | Про то, как прошить полученным файлом микроконтроллер, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | Автор заметки: | ||