STM32 для новачків: обираємо плати, середовища та перші кроки
Привіт, мене звати Євгеній. Спочатку трохи про себе. Закінчив НАУ в Києві за спеціальністю інженер-електрик авіаційних систем. Після 10 років роботи з Джавою і клауд-технологіями вирішив знову взятись за старе — за електроніку. Почав вивчати мікроконтролери й згадувати схемотехніку з університетського курсу. В цій статті хочу поділитися власним унікальним шляхом знайомства з мікроконтролерами STM32 компанії STMicroelectronics. Багато в чому це буде саме власний досвід, осмислений і узагальнений.
Свій шлях я починав з Ардуїно (Arduino). Тому матеріал розрахований саме на тих, хто вже так само знайомий з Ардуїно і шукає дорожню карту (роадмапу) як перейти на STM32. Якщо ще не знайомі з Ардуїно, то рекомендую все-таки почати саме з неї. Вам може бути цього достатньо, а ще це може стати чудовим хобі на все життя. Інших, хто вирішив заглянути за горизонт або професійно розвиватися у сфері Embedded — ласкаво прошу!
Плата розробки для STM32
Пропоную почати з опису, що таке STM32. Це сімейство мікроконтролерів (далі МК) компанії STMicroelectronics, побудованих на архітектурі ARM-сімейства мікропроцесорів Cortex-M. Це актуальна та ефективна архітектура від компанії ARM, призначена для побудови пристроїв з невеликим електроспоживаням і високою продуктивністю. Тепер, після офіційної частини, розглянемо, як нам почати працювати з цими МК. Як не дивно, знадобиться девборда (плата розробника) побудована навколо STM32. Тут все доволі просто і важко буде помилитися при виборі своєї першої девборди. Кожен, навіть найдешевший МК, має в собі стандартний набір периферії, яку ви й будете вивчати, якщо вирішили почати цей шлях: GPIO, UART, I2C, SPI, ADC, Таймери, DMA, Watchdog. Більш просунуті МК мають додатковий набір периферії (DAC, CAN, USB, Ethernet тощо), але стандартний набір є у всіх і для початку цього більш ніж достатньо. Девбордів існує велика кількість, але є дві офіційні лінійки від самої STMicroelectronics: Nucleo та Discovery.
Переваги Nucleo-плат:
- вбудований програматор і дебагер прямо на платі;
- якість виконання системи живлення;
- сумісність виведених на плату GPIO-пінів з Ардуїно шілдами.
Discovery-плати мають ті самі переваги, що і Nucleo окрім сумісності з Ардуїно. Також часто мають специфічну периферію на платі, як-от:
- TFT/LCD-дисплей;
- гіроскоп чи будь-які інші датчики;
- сенсорну кнопку;
- Ethernet;
- тощо.
Ціна цих плат розробки зазвичай стартує від 800 грн. Різниця у вартості між ними часто зумовлена тим, що Discovery-борда має якусь специфічну периферію, як-от дисплей чи якийсь сенсор. Discovery є сенс обирати під конкретний проєкт. Коли ви точно знаєте, що у вашому продукті буде використовуватись дисплей чи, наприклад, датчик температури, і для зручності розробки ви хочете, щоб це уже було на девборді. Ви точно не помилитесь, якщо в ролі своєї першої девборди оберете будь-яку доступну Nucleo без жодної додаткової зовнішньої периферії. Оскільки та стандартна периферія, описана на початку цього параграфу, знаходиться вже всередині самого МК і нікуди від вас не дінеться. А будь-який сумісний дисплей чи датчик температури ви завжди зможете докупити пізніше і під’єднати.
Хоч Nucleo і дуже рекомендована для легкого і безболісного старту, але варто розповісти й про варіанти з АліEкспресу. Це більш доступні, але і більш «суворі» варіанти (найвідоміша BlackPill — F401 або F411). Суворі, тому що вимагають трохи більше навичок в плані підключення плати й завантаження прошивки. Такі плати мають значно менші габарити й не несуть на борту програматора/дебагера ST-Link. Прошивка часто відбувається через зовнішній програматор, який треба докупити. В дорожчих варіантах вона можлива і через DFU (USB), хоча зовнішній програматор буде краще. Також подібні плати мають простішу систему живлення з меншою кількістю захисних механізмів.
Зате вони дуже добре підійдуть для різних домашніх проєктів завдяки ціні та габаритам. Коли ви станете трохи більш досвідченими, описані вище недоліки перестануть бути перешкодою. Адже на кожен домашній пет-проєкт ви точно не будете купувати дорожчі й габаритніші Nucleo/Discovery, які важко помістити в невеликий пластиковий корпус. Вартість таких плат варіюється від 60 до 200 грн залежно від МК, який використовується і магазину. Рекомендую магазин-виробник WeAct Studio з АліEкспрес. Купував у них кілька різних девбордів, ST-Link програматор, логічний аналізатор, претензій не маю.
Середовище розробки
Середовище розробки — це основне місце роботи, де Ви будете створювати програми для STM32 МК. Їх існує багато різних: STM32CubeIDE (офіційна від ST Microelectronics), Microsoft VS Code, Keil uVision (офіційна від самої ARM), IAR і навіть Arduino IDE. Якщо ми тут вже зібрались професійно працювати з STM32, то Arduino нам, звичайно, не підходить. Але насправді досить часто для перевірки концепту Arduino не така вже і погана. Майте лише на увазі, що гарантовано в Arduino буде працювати Arduino API, але добра половина прикладів з Ардуїно-бібліотек просто так не заведеться. Або не заведеться взагалі. Оскільки вони часто заточені під AVR (класичні Arduino) і ESP32, хоч і написані на Arduino API. Але поблимати світлодіодом точно зможете, і навіть більше.
Далі йде STM32CubeIDE, яка скоріше всього і буде вашим вибором на початку. Це офіційне середовище розробки від STMicroelectronics, яке дозволить відносно швидко запустити той самий «блінк» (поблимати світлодіодом), засноване на Eclipse. Можна графічним способом ініціалізувати GPIO-піни, периферії, задати бажану частоту самого МК і частоти окремої групи периферій. І все це — в кілька кліків мишкою. Під капотом IDE напише «нудний» код з ініціалізації цього всього, а вам залишиться лише написати безпосередньо потрібний шматок і лише у спеціально відведеному під це місці. Тобто виходять досить контрольовані умови розробки. Щоб важко було помилитися і зробити щось не те, від чого ваш МК навіть не запуститься, а ви не зрозумієте чому нічого не працює.
Інший варіант — це Microsoft Visual Studio Code (VS Code). З усіх перелічених раніше IDE ця не створювалась спеціально для програмування мікроконтролерів (компенсується PlatformIO-плагіном від українських розробників), але, як на мене, є найзручнішою, найшвидшою і сучасною. І якщо ви вже використовуєте її для інших мов програмування, а скоріше за все так і є, то перейти на неї вам буде нескладно. Окрім тієї частини роботи, де STM32CubeIDE згенерував би замість вас важливу і нетривіальну частину коду.
Отже, вибір середовища розробки на початку нашого шляху падає на STM32CubeIDE. Коли станете більш обізнані в тому, як ініціалізується сам МК і його периферії, як користуватися периферіями, і зрозумієте принцип роботи з HAL, то перейдете в VS Code якщо у вас так само як і в автора статті вроджена алергія на Eclipse-подібні IDE. А далі на більш реальних проєктах будете використовувати CMake, власноруч встановлювати компілятор, лінкер, дебагер (toolchain), а також керувати залежностями/бібліотеками в будь-якій зручній для вас IDE. Але це все вже потім.
Ось приклад, як виглядають налаштування PlatformIO та блінк-програма на STM32G030 з дефолтною частотою ядра та ініціалізацією GPIO:
Висновки
Якщо підсумувати, то для старту буде потрібен один з таких сетапів:
Рекомендований сетап | Альтернативний сетап для більш досвідчених | Бюджетний сетап для більш досвідчених | |
---|---|---|---|
Борда | будь-яка STM32 Nucleo-64 (800 грн) | BlackPill F401/F411 (200 грн) * | STM32G030F6P6 (100 грн) * |
IDE | STM32CubeIDE | VS Code + PlatformIO | VS Code + PlatformIO |
Додатково | нічого не потрібно | Рекомендується: програматор ST-Link (200 грн) | Обов’язково: програматор ST-Link (200 грн) |
*в альтернативному і бюджетному сетапах потрібно буде запаяти гребінки пінів власноруч.
Тобто для старту в STM32 рекомендується плата розробки Nucleo-64. Не обов’язково якоїсь потужної серії, як-от G4 чи H5. Згодиться і G0, F3. Також потрібна безкоштовна STM32CubeIDE (потребує реєстрації) як середовище розробки.
В майбутніх публікаціях напишемо простий «блінк» на трьох різних IDE та порівняємо їх.
113 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів