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

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


ob:o7:stm32f103c8t6

Различия

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

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

ob:o7:stm32f103c8t6 [2017/10/03 10:37]
prospero78 [Подключение]
ob:o7:stm32f103c8t6 [2020/10/29 07:08]
Строка 1: Строка 1:
-====== Отчёт о сборке и прошивке STM32F103C8T6 ====== 
- 
- 
-Эта статья даст возможность при желании спаять свой контроллер и полезную обвеску к нему. Будет приведено достаточное число картинок для самостоятельного повторения всех действий. 
- 
-==== Почему именно этот контроллер? ==== 
-Как уже было сказано в одной статье, этот контроллер достаточно дешёвый (130 рублей на январь 2017 года), есть компилятор под него на языке **Oberon-07**, который работает как подсистема в среде **BlackBox Component Builder**. Контроллер весьма развит, так что это вполне разумный выбор. 
- 
-==== Заказ контроллера ==== 
-Два контроллера были заказаны на одном из интернет-сайтов, оказалось, что исполнитель проживает в городе Уфа. Получены на местном отделении Почты России. Конверт был слегка надорван (видимо ФСБ не спит, либо кто-то не очень чистоплотный), но содержимое оказалось в порядке. Вместе с пересылкой стоимость заказа оказалась около 400 рублей. Оба контроллера были упакованы в индивидуальные антистатические пакеты, всё вместе было в одном пакете с амортизирующими шариками. 
- 
-{{:ob:o7:img_20170121_154021_1_.jpg?200|}} 
- 
-Как видно, комплектность платы: 
-  * сам контроллер 
-  * контактная гребёнка 
- 
- 
-==== Сборка контроллера ==== 
-Для этого нам потребуются: 
-  * паяльник на 25-60 Вт 
-  * припой ПОС-61 
-  * нейтральный флюс на основе канифоли 
-  * терпение и аккуратность 
- 
-{{:ob:o7:img_20170121_154503_1_.jpg?200|}} 
- 
-Также не помешают какие-нибудь газеты на рабочую поверхность, особенно, если это любимый полированный столик мамы/сестры/жены. Не забываем, что паяльник горячий -- нужна подставка, которая легко делается из куска медного провода толщиной 2,5...4 мм. 
- 
-Обратите внимание, что длина контактной гребёнки в разы больше длины платы. Её необходимо монтажным ножом разрезать пополам, если у вас есть какие-либо платки для расширения, либо разъёмы, либо вы можете напаять гибкие проводники сечением 0,22...0,5 мм кв прямо на плату. С монтажным проводом туго, автор статьи обошёлся слаботочным проводом из кабеля `SAS 8 x 0,22`. Но необходимо помнить: перегрев платы чреват выходом из строя контроллера. Кто уже работал с паяльником, также должны помнить о статическом напряжении. Для избежания пробоя необходимо заземлять жало паяльника и тело. Например, на батарею (Если такая батарея не покрашена и надёжно заземлена. В противном случае, может быть даже ухудшение ситуации по сохранности контроллера). 
- 
-==== Чем подключить к ПК ==== 
-Самый оптимальный вариант подключения платы к ПК -- через переходник `USB-UART`. Выглядит он так: 
- 
-{{:ob:o7:cp2102-ms-1-1_zpsdf87b620.jpg?200|}} 
- 
-Цена его смехотворна: можно найти за 70 рублей (на январь 2017 года) 
- 
-Автор статьи со скрипом его нашёл в не самом маленьком городе. Причём, продавец по телефону сказала, что такого чуда у них нет. Не верьте продавцам!!! 
- 
-Существуют и другие варианты с UART, если стандартного нет в наличии ((Здесь другие варианты не рассматриваются, но, возможно, у читающего взлетит вариант с Arduino в качестве UART-контроллера. Статьи на русском ищутся вполне легко)) 
- 
-==== Подключение ==== 
-Из-за дешевизны контроллера, его начинка упрощена до невозможности. Так, например, контроллер `Arduino` более прост в этом плане. Но и более дорогой (примерно в 4 раза, при гораздо более скромных возможностях). 
- 
-На конвертере `UART` нам потребуются все сигнальные контакты: Rx (чтение), Tx (передача). Дело также не пойдёт без питания 3.3 Вольта (`3V3`), и "земли" (`GND`). На контроллере часто есть дополнительный контакт 5 Вольт. Не вздумайте его подключить к 3.3 Вольта!!!! Ваш контроллер сразу отправится на небесную лужайку для электроники, которая умерла мученической смертью. По описанию, контроллер `STM32F103C8T6` в качестве питания принимает напряжение от 2.2 до 3.3 Вольта. В ходе многочисленных экспериментов над этим контроллером, автор статьи по невнимательности подал питание через `UART`, и через блок питания от мобильного телефона на разъём `MicroUSB Type A` (на самом микроконтроллере). Результаты такой запарки были катастрофическими: вышли из строя микроконтроллер, `UART`, блок питания мобильного телефона, и есть подозрения, что в ноутбуке тоже не всё в порядке (по крайней мере, пришлось переустанавливать операционную систему). 
- 
-Подключение со стороны контроллера выглядит несколько сложнее. К моменту подключения все ножки гребёнки уже должны быть распаяны, так как контакты `Tx` и `Rx` у контроллера сидят ножках. Они все подписаны, так что при нормальном зрении -- они читаемы легко. 
- 
-Небольшая табличка, как будет выглядеть подключение: 
-|| UART || Контроллер || 
-|| Tx   || PA10|| 
-|| Rx   || PA9 || 
-|| 3V3  || 3V3 || 
-|| GND   || GND || 
- 
-На контроллере, по крайней мере, две точки подключения 3V3 и GND. Никакой разницы нет между контактами с одинаковой маркировкой. Тут проблем не будет. 
- 
-==== Подготовка инструментов ==== 
-Разумеется, потребуется BlackBox Component Builder. На этой Вики, в разделе ссылки можно скачать этот пакет. 
-В данном случае был использован пакет для Linux (x64). Он свободно скачивается с сайта http://oberoncore.ru/, раздел "Проекты". Пакет подготовлен Иваном Денисовым ((Новосибирск рулит)), потому, как всегда всё работает)). Выбор такого пакета обусловлен тем, что у автора статьи на личном ноуте стоит Linux Mint (x64). Обратите внимание: чтобы под Linux запустился BlackBox -- необходимо установить все пакеты, от которых зависит BlackBox. На странице загрузки Иван Денисов представил исчерпывающую информацию, как это сделать. На http://youtube.com/ можно посмотреть дополнительно видео. 
- 
-Кроме BlackBox потребуется компилятор от Александра Ширяева((https://github.com/aixp/O7)). В этой подсистеме для BlackBox будет несколько папок: 
-  * Micro -- содержит набор модулей для описания внутренней архитектуры множества контроллеров и их распиновку. Практически все они построены поверх ядер процессоров ARMv6 и ARMv7((Тех самых, что стоят в наших мобильных телефонах на базе Android)) 
-  * O7 -- собственно, сам компилятор Oberon-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:INTEGER; 
- ModeOn:BOOLEAN; 
-  
-PROCEDURE PowerUp; 
-BEGIN 
- PowerOn:=PowerOn+dtPower; 
- IF PowerOn > timeTick THEN 
- PowerOn:=timeTick 
- END 
-END PowerUp; 
- 
-PROCEDURE PowerDown; 
-BEGIN 
- PowerOn:=PowerOn-dtPower; 
- IF PowerOn<0 THEN 
- PowerOn:=0 
- END 
-END PowerDown; 
- 
-PROCEDURE Sleep (x: INTEGER); 
-BEGIN  
- REPEAT  
- DEC(x) 
- UNTIL x = 0 
-END Sleep; 
- 
-PROCEDURE SleepOn; 
-VAR 
- sleep:INTEGER; 
-BEGIN 
- sleep:=PowerOn; 
- REPEAT  
- DEC(sleep) 
- UNTIL sleep = 0 
-END SleepOn; 
- 
-PROCEDURE SleepOff; 
-VAR 
- sleep:INTEGER; 
-BEGIN 
- sleep:=timeTick - PowerOn; 
- REPEAT  
- DEC(sleep) 
- UNTIL sleep = 0 
-END SleepOff; 
- 
-PROCEDURE BlinkTick; 
-BEGIN 
- IF PowerOn > dtPower THEN 
- SYSTEM.PUT(MCU.GPIOCBSRR, {13}); (*  On PC13 *) 
- END; 
- SleepOn; 
- IF PowerOn < (timeTick - dtPower) THEN 
- SYSTEM.PUT(MCU.GPIOCBSRR, {13 + 16}) (*  Off PC13 *); 
- END; 
- SleepOff 
-END BlinkTick; 
- 
-PROCEDURE Blink3; 
-VAR 
- iter:INTEGER; 
-BEGIN 
-FOR iter:=1 TO 3 DO 
- SYSTEM.PUT(MCU.GPIOCBSRR, {13}); (* !PC13 *); 
- Sleep(sleepTime DIV 4); 
- SYSTEM.PUT(MCU.GPIOCBSRR, {13 + 16}) (* !~PC13 *); 
- Sleep(sleepTime DIV 4) 
- END; 
-END Blink3; 
- 
-PROCEDURE LedUp; 
-VAR 
- iter:INTEGER; 
-BEGIN 
- FOR iter:=1 TO ziklPerSec DO 
- PowerUp; 
- BlinkTick 
- END; 
- PowerOn:=timeTick; 
- Sleep(sleepTime); 
-END LedUp; 
- 
-PROCEDURE LedDown; 
-BEGIN 
- FOR iter:=1 TO ziklPerSec DO 
- PowerDown; 
- BlinkTick 
- END; 
- PowerOn:=0; 
- SYSTEM.PUT(MCU.GPIOCBSRR, {13 + 16}) (* !~PC13 *); 
- Sleep(sleepTime); 
-END LedDown; 
-  
-BEGIN 
- PowerOn:=0; 
- ModeOn:=TRUE; 
- PinCfg.Configure(PinCfg.C, 13, PinCfg.outputPushPull2MHz); 
- REPEAT 
- Blink3; 
- LedUp; 
- LedDown 
- UNTIL FALSE 
-END MicroSlowLed. 
- 
-^Q O7ARMv7MP.Compile @/s 
- 
-^Q O7ARMv7MLinker.Link STM32F103C8 MicroSlowLed 
-</code> 
-Немного комментариев: 
-  * При запуске контроллера -- он мигнёт три раза. 
-  * Потом он плавно начнёт зажигать светодиод всё ярче. 
-  * Потом контроллер плавно светодиод погасит. 
-  * Цикл будет повторяться бесконечно. 
- 
-По сути, код показывает, как можно плавно (ШИМ) и дискретно управлять встроенным светодиодом. Вся программа состоит из мелких процедур, разобрать самостоятельно их совсем не сложно. 
-==== Компиляция ==== 
-Файл модуля должен быть сохранён в папке Mod подсистемы Micro. Если попытаться стандартным способом скомпилировать эту программу -- ничего не выйдет. Это правильно. Так как, это не Компонентный Паскаль!! Это Oberon-O7!!! Хотя, спутать их не составит никакой сложности. Разница между этими двумя языками -- в деталях ((именно в деталях кроется дьявол)).  
- 
-Если подсистема O7 установлена верно, то должно появиться соответствующее меню -- O7. Именно в нём и надо выбрать команду на компиляцию. В нашем случае -- это архитектура ARMv7. Либо воспользоваться коммандером в комментариях, либо за концом модуля. 
- 
-И, конечно, полученный бинарник надо скомпоновать с загрузчиком. После этого, бинарный код готов к прошивке на контроллер. 
- 
-==== Прошивка контроллера ==== 
-Для успешной прошивки контроллера необходимо установить программу stm32flash. На контроллере, для успешной прошивки необходимо перемычку boot0 поставить в положение ON((изначально обе перемычки стоят в OFF)). Это разрешит прошивку контроллера в его системную память. И в завершении всего, необходимо нажать кнопку RESET. Это заставит контроллер войти в режим прошивки и ожидать информацию с порта UART1 (те самые две ножки на боковой гребёнке контроллера). 
- 
-После этого, из каталога, где лежит готовый файл-прошивка с именем нашего модуля, но расширением *.hex, необходимо выполнить команду: 
- 
-    stm32flash -w ./SlowLed.hex -v -g 0x0 /dev/ttyUSB0 
- 
-Обратите внимание, что имя файла указано без названия подсистемы. Утилита stm32flash не понимает таких выкрутасов. Кроме того, устройство /dev/ttyUSB0 -- у читателя может называться по-другому. Чтобы узнать название устройства, необходимо запустить stm32flash без параметров((если не получится посмотрите видео Ивана Денисова)). 
- 
-Если прошивка прошла успешно, утилитка stm32flash выведет сообщение, что прошивка залита на 100%. У автора статьи за примерно 20 попыток прошить -- не было ни одного сбоя. Признаком передачи информации будет моргание светодиода на контроллере UART (Если, конечно, такой есть. А он обычно есть). 
- 
-После окончания прошивки контроллер сразу перейдёт к исполнению программы. Смотрим ссылку на видео: [[https://vk.com/videos309656471?z=video309656471_456239142%2Fpl_309656471_-2|вот так оно работает]], и, как говорится, не забываем ставить лайки :-) 
- 
-Для того, чтобы контроллер работал сразу после подачи питания в автономном режиме, необходимо перемычку boot0 вернуть в положение OFF. В качестве источника питания подойдёт любая зарядка от сотового телефона с выходным током от 250 мА. 
- 
-==== Заключение ==== 
-Большая часть операций выполняется один раз, привыкание к языку Oberon-O7 происходит быстро. На долю без повторений выпадает, по сути, только написание кода и полезной обвязке ((Схемотехника очень схожа на Arduino, с той лишь разницей, что напряжение 3,3 Вольта вместо 5 Вольт у Arduino. Все схемы адаптируются достаточно легко.)) Необходимо обратить внимание читателей: использование силовой электроники (от 50 Вольт переменки и выше) опасно для жизни. Поэтому, обязательно -- почитайте про правильную работу с высокими напряжениями при завязке на низковольтные контроллеры. 
- 
-И удачи всем в освоении Oberon-O7! :-) 
  
ob/o7/stm32f103c8t6.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)