Огляд STM32 серії G0
Хотів би поділитися власним досвідом роботи з G0 серією, яка, як на мене, є дуже цікавою та популярною серед любителів. Компанія ST Microelectronics випустила в світ G0 серію в 2019 році як заміну "мейнстрімної" F0 серії, але з покращеннями енергоефективності з L4 серії. Тобто дана серія це щось середнє між бюджетною F0 та енергоефективною L4.
Енергоефективність
G0 базується на 90 нм техпроцесі, що в порівнянні з 130 нм в F0 є вагомим покращенням. Згідно самої ST серія G0 споживає менше 100µA на 1MHz якщо біжить на частоті 64 MHz. Це значно менше в порівнянні з 250µA в F0. Також додався Shutdown режим (все вимкнено, працює лише RTC) до режимів енергозбереження (може бути корисним в певних сценаріях). Деякі старші представники серії мають LP (Low-power) UART.
Ціна
В G0 серії виробник реалізував ідею зменшення собівартості кінцевого продукту всіма можливими способами:
- піни живлення цифрових і аналогових периферій були об'єднані. Тобто тепер весь МК живиться лише від однієї пари пінів — та . Таким чином виробник спрощує процес розведення плати, але і забирає можливість відокремити живлення, що в теорії може мати негативні наслідки. Хоча STM і запевняють, що якраз попрацювали над шумами та стабільністю
- тепер за замовчуванням пін BOOT0 працює як звичайний GPIO, що теж вивільняє один вихід. Детальніше про це — нижче
- вивільнені піни тепер слугують як GPIO, що дозволяє використовувати менші корпуси МК. В теорії це дозволяє трохи зекономити на розмірі друкованої плати та на дорожчих корпусах з більшою кількістю пінів
- збільшена точність внутрішнього резонатора — HSI16
- в моделях (STM32G0B, STM32G0C) з підтримкою Full-Speed USB (не плутати з USB PD) внесли додатковий 3-ій HSI48 для роботи USB без зовнішнього резонатора. Таким чином ST заявляє про функцію USB 2.0 FS device (crystal-less) щоб можна було зекономити на зовнішньому резонаторі. Чи стабільно працює на практиці не перевіряв
- покращена система захисту від короткочасних стрибків напруги до кількох тисяч вольт. Пробував багато разів бити борду і сам МК розрядом від п'єзоелемента запальнички, то МК всього лиш перезавантажувався і без проблем продовжував працювати. Не знаю скільки точно вольт видає запальничка, але при цьому ніяких інших діодних захистів від стрибків напруги на моїй борді не було. Це ще одна економія на компонентах (BOM) в крайніх випадках
Тобто виробник розуміє, що цю серію будуть використовувати саме в бюджетних пристроях, тому йде назустріч розробникам і намагається допомогти зменшити собівартість кінцевого продукту. Наразі G0 серію можна вважати найдешевшою серед усіх МК, навіть незважаючи на недавній запуск ультрабюджетної серії C0. Серія C0 взагалі позиціонується як найбільш бюджетна з мінімальним набором функцій, але в магазинах, де зараз можна придбати C0, ціна може навіть перевищувати G0. Скоріше всього це тимчасово.
Програмний BOOT0
Ще одне "покращення" в G0 це відсутність за замовчуванням можливості перейти в режим бутлоадера, підтягнувши BOOT0 до плюса та ресетнувши МК — звичним для багатьох виробників МК способом. Тепер завантажитись з системної пам'яті, тобто в бутлоадер, можна спеціальною комбінацією бітів nBOOT0 та nBOOT1 в Option Bytes (див. скрін вище). Ці біти можна виставити або програмно або через STM32CubeProgrammer
Насправді можна повернути стару поведінку з піном BOOT0, виставивши 0 в біт nBOOT_SEL (див. скрін вище). Якщо nBOOT_SEL виставлений в 1 (по замовчування - саме так), то поведінка BOOT0 повністю ігнорується. Ось так можна виставити 0 в nBOOT_SEL програмно:
/*
* LAB Name: STM32 Boot0 Enable
* Author: Khaled Magdy
* For More Info Visit: www.DeepBlueMbedded.com
*/
#include "stm32g0xx.h"
void Flash_Unlock(void) {
FLASH->KEYR = 0x45670123; // Unlock Flash memory
FLASH->KEYR = 0xCDEF89AB;
FLASH->OPTKEYR = 0x08192A3B; // Unlock Option Bytes
FLASH->OPTKEYR = 0x4C5D6E7F;
}
void Boot0_Enable(void) {
FLASH->OPTR &= ~FLASH_OPTR_nBOOT_SEL; // Clear the nBOOT_SEL bit to enable BOOT0 pin functionality
while(FLASH->SR & FLASH_SR_BSY1); // Wait for any ongoing flash operation to complete
FLASH->CR |= FLASH_CR_OPTSTRT; // Start the Option Byte programming
while(FLASH->SR & FLASH_SR_BSY1); // Wait for the programming to complete
FLASH->CR |= FLASH_CR_OBL_LAUNCH; // Launch the option byte loading
}
int main(void) {
if ((FLASH->OPTR & FLASH_OPTR_nBOOT_SEL) == 0) // Check if the nBOOT_SEL bit is already cleared
{
for (;;); // If already cleared, do nothing
}
Flash_Unlock(); // Unlock flash memory and option bytes
Boot0_Enable(); // Enable BOOT0 pin functionality
for (;;); // We should never reach this point as the system will reset
}
Тобто пін BOOT0 працює лише тоді, коли nBOOT_SEL виставлений в 0, що тепер вважається застарілим підходом. Новий підхід з маніпуляціями над nBOOT0 та nBOOT1 згідно самої ST надає більшу гнучкість, прибирає необхідність розводити кнопку BOOT0 на платі, що в теорії полегшує прошивку пристрою на фабриці без необхідності натискати фізичну кнопку (як ніби раніше лише так прошивались на фабриках). Ще одне корисне нововведення це те, що бутлоадер тепер запуститься автоматично, якщо відсутня прошивка, причому в незалежності від будь-яких значень Option Bytes.
Інші особливості G0
- пропонуються корпуси від 8-pin до 100-LQFP
- до 512КБ флеш-пам'яті та до 144КБ оперативної
- якщо плануєте купувати на АліEкспрес, то можуть прийти вже поюзані (залежить від магазину) МК з присутніми прошивками. Це стосується насправді всіх МК куплених на АліEкспрес. Але для G0 серії це ще й означає, що бутлоадер сам не запуститься, оскільки присутня прошивка і із-за нових нюансів з BOOT0 описаних вище. Тому точно знадобиться ST-Link
- відсутня підтримка JTAG
🔚 Висновки
Як на мене, G0 вийшла досить цікавою з багатьма перевагами (енергоефективність, стабільність, здешевлення BOM) і, що важливо — привабливою ціною від 0,35$ (1000+ екземплярів). Нещодавно ST презентувала серію C0 32-бітних МК як заміну 8-бітним МК. Але наразі ж виходить так, що 8-бітні МК все ще мають нижчу ціну (хоч і пропонують менше) і свої області застосування. А роль ультрабюджетної серії тимчасово виконує G0 допоки C0 не стане дійсно масовою. Мою особисту увагу привертають лише найдешевші представники серії G0, тому що, якщо дивитися на дорожчих, то вони уже заходять на цінову територію інших серій, де не мають ніякої переваги.
Дата публікації
2024.11.14