Показаны различия между двумя версиями страницы.
ob:o7:stm32f103c8t6 [2017/10/03 10:32] prospero78 [Подключение] |
ob:o7:stm32f103c8t6 [2020/10/29 07:08] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Отчёт о сборке и прошивке STM32F103C8T6 ====== | ||
- | |||
- | |||
- | Эта статья даст возможность при желании спаять свой контроллер и полезную обвеску к нему. Будет приведено достаточное число картинок для самостоятельного повторения всех действий. | ||
- | |||
- | ==== Почему именно этот контроллер? | ||
- | Как уже было сказано в одной статье, | ||
- | |||
- | ==== Заказ контроллера ==== | ||
- | Два контроллера были заказаны на одном из интернет-сайтов, | ||
- | |||
- | {{: | ||
- | |||
- | Как видно, комплектность платы: | ||
- | * сам контроллер | ||
- | * контактная гребёнка | ||
- | |||
- | |||
- | ==== Сборка контроллера ==== | ||
- | Для этого нам потребуются: | ||
- | * паяльник на 25-60 Вт | ||
- | * припой ПОС-61 | ||
- | * нейтральный флюс на основе канифоли | ||
- | * терпение и аккуратность | ||
- | |||
- | {{: | ||
- | |||
- | Также не помешают какие-нибудь газеты на рабочую поверхность, | ||
- | |||
- | Обратите внимание, | ||
- | |||
- | ==== Чем подключить к ПК ==== | ||
- | Самый оптимальный вариант подключения платы к ПК -- через переходник USB-UART. Выглядит он так: | ||
- | |||
- | {{: | ||
- | |||
- | Цена его смехотворна: | ||
- | |||
- | Автор статьи со скрипом его нашёл в не самом маленьком городе. Причём, | ||
- | |||
- | Существуют и другие варианты с UART, если стандартного нет в наличии ((Здесь другие варианты не рассматриваются, | ||
- | |||
- | ==== Подключение ==== | ||
- | Из-за дешевизны контроллера, | ||
- | |||
- | На конвертере `UART` нам потребуются все сигнальные контакты: | ||
- | |||
- | Со стороны контроллера всё несколько сложнее. К моменту подключения все ножки гребёнки уже должны быть распаяны, | ||
- | |||
- | Небольшая табличка, | ||
- | || UART || Контроллер || | ||
- | || Tx || PA10|| | ||
- | || Rx || PA9 || | ||
- | || 3V3 || 3V3 || | ||
- | || GND || GND || | ||
- | |||
- | На контроллере, | ||
- | |||
- | ==== Подготовка инструментов ==== | ||
- | Разумеется, | ||
- | В данном случае был использован пакет для Linux (x64). Он свободно скачивается с сайта http:// | ||
- | |||
- | Кроме BlackBox потребуется компилятор от Александра Ширяева((https:// | ||
- | * Micro -- содержит набор модулей для описания внутренней архитектуры множества контроллеров и их распиновку. Практически все они построены поверх ядер процессоров ARMv6 и ARMv7((Тех самых, что стоят в наших мобильных телефонах на базе Android)) | ||
- | * O7 -- собственно, | ||
- | * Examples -- содержит ряд примеров, | ||
- | |||
- | ==== Код программы ==== | ||
- | |||
- | А теперь, | ||
- | <code Oberon2> | ||
- | MODULE MicroSlowLed; | ||
- | (* Программа имитирует плавное зажигание и плавное затухание. | ||
- | Для этого постоянно меняется доля свечения и доля затухания. | ||
- | Кадр зажигания должен быть 1/50 сек -- примерно 16000 тиков. | ||
- | Кадров в секунду -- примерно 50 | ||
- | |||
- | ^Q O7ARMv7MP.Compile @/s | ||
- | |||
- | ^Q O7ARMv7MLinker.Link STM32F103C8 MicroSlowLed | ||
- | |||
- | *) | ||
- | |||
- | IMPORT SYSTEM, | ||
- | MCU := MicroSTM32F10xxD, | ||
- | PinCfg := MicroSTM32F10xPinCfg; | ||
- | |||
- | CONST | ||
- | sleepTime = 800000; (* примерно 1 сек @ Thumb-16 *) | ||
- | timeTick = sleepTime DIV 50 ; (* длительность тика при 50 тиков в секунду *) | ||
- | ziklPerSec = (sleepTime DIV timeTick - 15)*2; (* количество тиков за секунду -- примерно 50 *) | ||
- | dtPower = timeTick DIV ziklPerSec; (* прибавка времени светимости в одном тике *) | ||
- | |||
- | |||
- | VAR | ||
- | PowerOn, iter: | ||
- | ModeOn: | ||
- | |||
- | PROCEDURE PowerUp; | ||
- | BEGIN | ||
- | PowerOn: | ||
- | IF PowerOn > timeTick THEN | ||
- | PowerOn: | ||
- | END | ||
- | END PowerUp; | ||
- | |||
- | PROCEDURE PowerDown; | ||
- | BEGIN | ||
- | PowerOn: | ||
- | IF PowerOn< | ||
- | PowerOn: | ||
- | END | ||
- | END PowerDown; | ||
- | |||
- | PROCEDURE Sleep (x: INTEGER); | ||
- | BEGIN | ||
- | REPEAT | ||
- | DEC(x) | ||
- | UNTIL x = 0 | ||
- | END Sleep; | ||
- | |||
- | PROCEDURE SleepOn; | ||
- | VAR | ||
- | sleep: | ||
- | BEGIN | ||
- | sleep: | ||
- | REPEAT | ||
- | DEC(sleep) | ||
- | UNTIL sleep = 0 | ||
- | END SleepOn; | ||
- | |||
- | PROCEDURE SleepOff; | ||
- | VAR | ||
- | sleep: | ||
- | BEGIN | ||
- | sleep: | ||
- | REPEAT | ||
- | DEC(sleep) | ||
- | UNTIL sleep = 0 | ||
- | END SleepOff; | ||
- | |||
- | PROCEDURE BlinkTick; | ||
- | BEGIN | ||
- | IF PowerOn > dtPower THEN | ||
- | SYSTEM.PUT(MCU.GPIOCBSRR, | ||
- | END; | ||
- | SleepOn; | ||
- | IF PowerOn < (timeTick - dtPower) THEN | ||
- | SYSTEM.PUT(MCU.GPIOCBSRR, | ||
- | END; | ||
- | SleepOff | ||
- | END BlinkTick; | ||
- | |||
- | PROCEDURE Blink3; | ||
- | VAR | ||
- | iter: | ||
- | BEGIN | ||
- | FOR iter:=1 TO 3 DO | ||
- | SYSTEM.PUT(MCU.GPIOCBSRR, | ||
- | Sleep(sleepTime DIV 4); | ||
- | SYSTEM.PUT(MCU.GPIOCBSRR, | ||
- | Sleep(sleepTime DIV 4) | ||
- | END; | ||
- | END Blink3; | ||
- | |||
- | PROCEDURE LedUp; | ||
- | VAR | ||
- | iter: | ||
- | BEGIN | ||
- | FOR iter:=1 TO ziklPerSec DO | ||
- | PowerUp; | ||
- | BlinkTick | ||
- | END; | ||
- | PowerOn: | ||
- | Sleep(sleepTime); | ||
- | END LedUp; | ||
- | |||
- | PROCEDURE LedDown; | ||
- | BEGIN | ||
- | FOR iter:=1 TO ziklPerSec DO | ||
- | PowerDown; | ||
- | BlinkTick | ||
- | END; | ||
- | PowerOn: | ||
- | SYSTEM.PUT(MCU.GPIOCBSRR, | ||
- | Sleep(sleepTime); | ||
- | END LedDown; | ||
- | |||
- | BEGIN | ||
- | PowerOn: | ||
- | ModeOn: | ||
- | PinCfg.Configure(PinCfg.C, | ||
- | REPEAT | ||
- | Blink3; | ||
- | LedUp; | ||
- | LedDown | ||
- | UNTIL FALSE | ||
- | END MicroSlowLed. | ||
- | |||
- | ^Q O7ARMv7MP.Compile @/s | ||
- | |||
- | ^Q O7ARMv7MLinker.Link STM32F103C8 MicroSlowLed | ||
- | </ | ||
- | Немного комментариев: | ||
- | * При запуске контроллера -- он мигнёт три раза. | ||
- | * Потом он плавно начнёт зажигать светодиод всё ярче. | ||
- | * Потом контроллер плавно светодиод погасит. | ||
- | * Цикл будет повторяться бесконечно. | ||
- | |||
- | По сути, код показывает, | ||
- | ==== Компиляция ==== | ||
- | Файл модуля должен быть сохранён в папке Mod подсистемы Micro. Если попытаться стандартным способом скомпилировать эту программу -- ничего не выйдет. Это правильно. Так как, это не Компонентный Паскаль!! Это Oberon-O7!!! Хотя, спутать их не составит никакой сложности. Разница между этими двумя языками -- в деталях ((именно в деталях кроется дьявол)). | ||
- | |||
- | Если подсистема O7 установлена верно, то должно появиться соответствующее меню -- O7. Именно в нём и надо выбрать команду на компиляцию. В нашем случае -- это архитектура ARMv7. Либо воспользоваться коммандером в комментариях, | ||
- | |||
- | И, конечно, | ||
- | |||
- | ==== Прошивка контроллера ==== | ||
- | Для успешной прошивки контроллера необходимо установить программу stm32flash. На контроллере, | ||
- | |||
- | После этого, из каталога, | ||
- | |||
- | stm32flash -w ./ | ||
- | |||
- | Обратите внимание, | ||
- | |||
- | Если прошивка прошла успешно, | ||
- | |||
- | После окончания прошивки контроллер сразу перейдёт к исполнению программы. Смотрим ссылку на видео: [[https:// | ||
- | |||
- | Для того, чтобы контроллер работал сразу после подачи питания в автономном режиме, | ||
- | |||
- | ==== Заключение ==== | ||
- | Большая часть операций выполняется один раз, привыкание к языку Oberon-O7 происходит быстро. На долю без повторений выпадает, | ||
- | |||
- | И удачи всем в освоении Oberon-O7! :-) | ||