Перейти до основного вмісту

🏁 Старт в STM32

Хочу поділитися власним досвідом старту в STM32. Багато в чому це буде саме власний досвід, осмислений і узагальнений в цій статті. Свій шлях я починав з Ардуїно (Arduino), тому все буде розраховане саме на тих, хто вже так само знайомий з Ардуїно і шукає дорожню карту (роадмапу) як перейти на STM32. Якщо ще не знайомі з Ардуїно, то рекомендую все-таки почати саме з неї. Вам може бути цього достатньо і це може стати чудовим хобі на все життя. Для інших, хто вирішив заглянути за горизонт або професійно розвиватися в сфері Embedded — ласкаво прошу!

Плата розробки для STM32

Пропоную почати з опису що таке STM32. Це сімейство мікроконтролерів (далі МК) компанії STMicroelectronics побудованих на архітектурі ARM сімейства мікропроцесорів Cortex-M. Це актуальна та ефективна архітектура від компанії ARM призначена для побудови пристроїв з невеликим електроспоживаням і високою продуктивністю. Тепер, після офіційної частини, розглянемо як нам почати працювати з цими МК. Як не дивно, знадобиться девборда (плата розробки) побудована навколо STM32. Тут все доволі просто і важко буде помилитися при виборі яку ж обрати своєю першою девбордою. Кожен, навіть найдешевший МК, має в собі стандартний набір периферії, яку Ви і будете вивчати, якщо вирішили почати цей шлях: GPIO, UART, I2C, SPI, ADC, Таймери, DMA, Watchdog. Більш просунуті МК мають додатковий набір периферії (DAC, CAN, USB, Ethernet і т.д.), але стандартний набір є у всіх і для початку цього більш ніж достатньо.
Девбордів існує велика кількість, але є 2 основні офіційні лінійки від 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 програматор, логічний аналізатор, претензій не маю. Посилання додавати не буду оскільки посилання часто перестають працювати.

🖥️ Середовище розробки (IDE)

Середовище розробки це основне місце роботи, де ви будете створювати програми для вашого 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 і якщо у Вас так само як і у автора статті вроджена алергія на Eclipse-подібні IDE, то перейдете в VS Code. А далі, на більш реальних проєктах, будете використовувати CMake, власноруч встановлювати компілятор, лінкер, дебагер (toolchain), власноруч керувати залежностями/бібліотеками в будь-якій зручній для Вас IDE. Але це все вже потім.

Ось приклад як виглядають налаштування PlatformIO та блінк програма на STM32G030 з дефолтною частотою ядра та ініціалізацією GPIO:

🔚 Висновки

Якщо підсумувати, то для старту буде потрібен один з таких сетапів:

Рекомендований сетапАльтернативний сетап
для більш досвідчених
Бюджетний сетап
для більш досвідчених
Бордабудь-яка STM32 Nucleo-64 (800 грн)BlackPill F401/F411 (200 грн) *STM32G030F6P6 (100 грн) *
IDESTM32CubeIDEVS Code + PlatformIOVS Code + PlatformIO
Додатковонічого не потрібноРекомендується:
програматор ST-Link (200 грн)
Обов'язково:
програматор ST-Link (200 грн)
* в альтернативному і бюджетному сетапах потрібно буде запаяти гребінки пінів власноруч

Тобто для старту в STM32 рекомендується плата розробки Nucleo-64, причому не обов'язково якоїсь потужної серії як от G4 чи H5, згодиться і G0, F3. Також потрібна безкоштовна STM32CubeIDE (потребує реєстрації) в якості середовища розробки.

В майбутніх публікаціях напишемо простий "блінк" на 3-ох різних IDE та порівняємо їх.





Дата публікації
2024.10.10