Спроба подружитися з STM32

Спроба подружитися з STM32

Минулого разу я знущався над мікроконтролерами ATtiny 85, сполучаючи бідні восьминогі чіпи з Arduino IDE. А потім мені захотілося подивитися, що ж за диво таке - STM32, шанувальники яких дивляться на програмістів AVR (не кажучи вже про ардуїнщиків) з деяким несхваленням. У процесі гугління-втікача з'ясувалося, що STM32 «для ідіотів» існує - є проект Leaf Maple, в рамках якого - дві плати на STM32F103 і середовище розробки, що є клоном Arduino IDE.

Вирішальним фактором стала вартість. Китайська версія Leaf Maple Mini продається за 4 $ - це трохи дорожче Arduino Nano. Замовивши три штуки, я почав чекати.

Мабуть, зі ставкою на Maple я трохи поквапився - проект швидше мертвий, ніж живий. IDE не розвивається, драйверів без бубна під Windows 8 немає, бібліотеки в зародковому стані, повна зневіра і запустіння. Заради інтересу я поморгав світлодіодом, запустивши Maple IDE під OS X (запрацювало з коробки), а потім став думати, з якого боку підходити до плати для подальшого вивчення.

Для початку, з'ясував я ось що. У мікроконтролер STM32F103CBT6 (назви у ST, зауважу, суворі) на платі Leaf Maple Mini зашитий завантажувач, який працює через USB з Maple IDE. Знаходиться він у флеш-пам'яті. А як програмувати «голий» STM32? По-хорошому, треба використовувати ST-Link, адже він дозволяє не тільки «заливати» прошивку, але і робити налагодження. А без цієї залізяки що робити? Використовувати «системний» завантажувач STM32, що працює за UART. Міні-плата на чіпі CP2102 в засіках є, можна починати чудити.

IDE, які використовуються для програмування STM32, вганяють мене в тугу. Справа в тому, що я програмістом не є, і множинні віконця з вкладками і купою страшних букв викликають потаємне небажання у всьому цьому копатися. Але, схоже, треба. Найменш замороченої з трійці (Keil, IAR, Coocox) мені здалася остання.

Отже, послідовність дій. Ставимо Coocox, до нього - компілятор GCC для ARM. Пишемо шедевральний проект - Blink. Потім на монтажній «дошці» збираємо конструкцію з Maple Mini і CP2102. З'ясовуємо, що для заливки прошивки потрібно щось ще, бо «кокос» хоче ST-Link. Безпосередньо скомпільований код легко прошивається по UART за допомогою утиліти від ST - Flash Loader Demonstrator. Тепер детальніше.

Кокос з граблями

Без граблів у мене ніяк. Перша ж «засідка» - поточна версія IDE (2.0) - це щось дивне, раптово не підтримує STM32F1xx. Видаляємо, ставимо версію 1.7.7, тепер можемо створити проект. До проекту підключаємо GPIO, беремо з цього модуля приклад з потрібним нам Blink і трохи його переробляємо, щоб задіяти світлодіод Maple Mini (PORT B PIN 1). Ініціалізація портів тут - ціла пісня (зрозуміла, але більш складна, ніж на AVR). Тобто, потрібно не просто сказати, мовляв, цей порт - вихід. Цей порт - його треба включити і тактувати, і буде він виходом з бантиком і плюшечкою, а не з закорючкою і гвоздиком...

Збірка заліза

Тут все просто - беремо модуль на CP2102 і з'єднуємо з STM32.

STM — 2102

RX1 — TX

TX1 — RX

GND — GND

Vin — VCC

Хитрість одна - як змусити STM32F103 запускатися в режимі завантажувача UART. Процес непогано описаний на сайті Leaf Labs у розділі «Що робити, якщо ви запороли USB завантажувач». Підключаємо ніжку BOOT1 до землі, натискаємо RESET і другу кнопку, відпускаємо RESET, відпускаємо другу кнопку. Привіт, завантажувач!

Пропалюємо!

Залишилося запустити Flash Loader Demonstrator і «згодувати» йому bin-файл, який бовтається після компіляції десь у надрах проекту. Цікаво, як називаються операції в цій утиліті. Download - це В чіп. А Upload - це З чіпа. Моє сприйняття бунтує, але, можливо, тут так прийнято.

Разом

Не можна просто так взяти і поморгати світлодіодом на STM32. Зробити це двома клацаннями миші (як в Arduino) або парою команд avr-gcc і avrdude тут не вийде. Спроба (Maple IDE) була, але здулася. Тому, доведеться реально сідати і розбиратися, як тут чого працює.

UPD. Додало опитування.

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.

Чи потрібна невелика стаття з перетворення Maple Mini на зневадник ST-Link?

76.06% Да 216

23.94% Ні 68

Проголосували 284 користувачі. Утрималися 75 користувачів.

Image