Купуючи свою першу плату Blue Pill ми всі очікуємо на легкість та зручність Arduino IDE та плати платформи arduino : arduino nano , arduino Leonardo , Arduino Mega. Адже вони здобули таку популярність в тому числі через зручність та доступність платформи Arduino IDE. Вона дозволяє без особливих навичок в електроніці та без грунтовної підготовки з програмування швидко створити перший свій проект. Але Blue Pill виявляється трошки складнішим для освоєння та для програмування.
Більшість підсаджених на платформу Arduino IDE не готова до складностей при роботі з Blue Pill. І зачасту плата Blue Pill закидується в якусь коробку до кращих часів.Адже ні платити за Keil MDK-ARM ні користуватись безкоштовною обмеженою та урізаною версією Keil MDK-ARM ні сідати за вивчення платформи Cube IDE , яка хоч і безкоштовна, але на порядок складніша для освоєння ніж Arduino IDE немає ніякого бажання.
Доступність різноманітних периферійних модулів arduino ще більше сприяє розповсюдженню різноманітних проектів. Це, безумовно, сприяє творчості в сфері електроніки серед широкого загалу. Але, електроніка дуже швидко розвивається. З часом настає момент коли при всій своїй легкості та доступності платформа arduino демонструє обмеженність через можливості 8-ми бітних мікроконтроллерів.

Як ти не старайся, але є межа і в периферійних функціях і в обчислювальних можливостях. Будь який погляд в бік збільшення можливостей веде шляхом STM32. Доводиться починати програмувати на
платформі STM32 і починають в основному з дуже розповсюдженої плати Blue Pill.
Що треба знати купуючи свою першу плату Blue Pill ?
- По перше на платі Blue Pill може бути встановлений як STM32F103C8T6 (пам’ять программ — 64 КБ, пам’ять данных — 20 КБ) так і STM32F103C6T6 (пам’ять программ — 32 КБ, пам’ять данных — 10 КБ). Різниця тільки в розмірі доступної пам’яті ну і звісно, в ціні.
- По друге на платі Blue Pill може бути встановлений як оригінальний STM32F103 так і його клон невідомого походження. В кращому випадку все буде працювати, але це не гарантовано.
- По третє плата Blue Pill може бути розпаяною чи ні — тобто гребінка буде окремо від плати — тут якщо впевнені в своїх паяльних навичках — нема питань. Якщо сумніваєтесь — беріть краще розпаяну.
- В четверте, але це насправді, напевне, найважливіше — це стабілізатор напруги 3,3 Вольта встановлений на платі. Тут або пощастило і в вас стабілізатор з захистом від перегріву, перевантаження Richtek RT9193-33 або ні та захисту немає.
Початок роботи з Blue Pill.
Для початку нам треба загрузити програму — загрузчик для плати Blue Pill . Треба щоб вона могла співпрацювати з Arduino IDE як плата платформи наприклад Arduino Mega. Трохи пояснень — arduino це симбіоз програмного забезпечення Arduino IDE та платформи ATmega2560 . В мікроконтролер попередньо записанний в його пам’яті бутлодер. Це десь схоже з біос материнської плати — тільки при записі біосу система зможе запуститись.
В нашому випадку плата Blue Pill що називається чиста — бутлодеру в ній немає, тому якщо ви підключите плату з допомогою USB кабелю до компьютера — ви нічого не побачите і Arduino IDE вашу плату Blue Pill не побачить.
На платах проекту Arduino для зв’язку з USB є спеціальна мікросхема USB-COM адаптеру, в Blue Pill такої немає, тому доведеться імітувати USB пристрій програмно записавши спеціальний код в Blue Pill. Є різні способи записати бутлодер в STM32, я використовую звичайний USB-COM конвертер та Flash loader demonstrator . Це працює з усіма платами Blue Pill на яких встановлено оригінальний процессор STM32.
Загрузка bootloader в Blue Pill.
-
- Скачаємо Flash loader demonstrator з офіційного сайту — це безкоштовно. Якщо це дуже складно — можна скачати в мене Flash loader demonstrator .
- Підключаємо плату Blue Pill до USB-COM конвертера згідно з схемою :

- При цьому підключаємо контакти PA9 та PA10 із розрахунку 3,3 Вольтової логіки. Тобто мікросхема USB-COM конвертера працює на 3,3 Вольтах. До речі Blue Pill теж працює на 3,3 Вольтах — адже 5 Вольт проходить через внутрішній стабілізатор RT9193-33 і тільки потім подається на контроллер STM32F103.
- Альтернативним адаптером наприклад таким

- тут трохи простіше — перемичка стоїть на живлення 3,3 Вольта для мікросхеми адаптера USB-COM відповідно залишається підключити контакт 5 Вольт до контакту 5 Вольт на платі Blue Pill , контакт gnd до контакту gnd на платі Blue Pill, контакт Rx до контакту A9 на платі Blue Pill, Tx до контакту A10 на платі Blue Pill

Танці з бубном навколо Windows 7.
Я не хочу сильно рекламувати та робити універсальну інструкцію, у декого скоріше інша версія віндовс, не важливо. Я демонструю робочий приклад для своєї версії вінди, якщо що, гугля в поміць.
USB-COM скоріше всього буде на ch340 чіпі, для його адекватної роботи потрібно встановити драйвер. Можна знайти в мережі, або взяти працюючий звідси : ch340
Після встановлення драйверу та підключення USB-COM чи як його ще називають USB-TTL конвертера можна запускати попередньо інстальований Flash loader demonstrator.
Вальс з Flash loader demonstrator.
В стартовому вікні вибираємо потрібний порт :
в початковому вікні буде виставлено порт COM0, Вам потрібно змінити порт на реальний COM порт вашого COM-TTL конвертора, наприклад як у мене :
на COM7 все інше залишаєм по замовчуванню та натискаєм клавішу Next якщо все зроблено правильно переходимо до наступного кроку, в мене вийшла наступна ситуація : 
це означає що я не перевів плату Blue Pill в режим програмування. Виправляємо помилку : початково плата приїзджає в режимі роботи — тобто обидві перемички BOOT0 і BOOT1 в режимі 0.
Для переводу плати в режим програмування необхідно BOOT0 перевести в режим 1 а BOOT1 залишити в режимі 0.
Після цього пробуєм повторно натиснути клавішу Next повинна з’явитись така картинка 
тут як раз та ситуація коли плата Blue Pill має встановленим інший мікропроцессор тому программа показує об’єм пам’яті 128К . Так буває щоб бути впевненим треба це перевірити, це поза межами даного проекту тому будемо вірити даташиту та тому що написано на мікроконтролері — тобто 64К. Мікропроцессор був пустий тому не активне вікно Remov protection, якби воно було активним, то перед всіми маніпуляціями потрібно б було натиснути Remov protection.
Тиснемо клавішу Next
і ще раз Тиснемо клавішу Next далі треба виконати послідовність — спочатку повністю стираємо всю флеш пам’ять
тиснемо клавішу Next .
Потім треба перевірити ф’юзи — на данному етапі просто виконуємо послідовність як обізянки 
тиснемо клавішу Next 
ставимо тут галочки і тиснемо клавішу Next .
Це все були операції по стиранню та поверненню до початкового стану нашого контролеру. Якщо ви ще нічого не писали в нього і він тільки що з упаковки, то попередні маніпуляції можна було ігнорити і почати з наступного кроку. Для цього потрібен файл generic_boot20_pc13.bin це продукт праці відомого ентузіасту Roger Clark його сторінка на гіт хабі Roger Clark . Файл можна скачати у нього, а можна взяти тут generic_boot20_pc13 .
Після цього записуємо даний бінарний файл в пам’ять мікроконтролеру 
попередньо вибираєм місце куди ми зберегли файл generic_boot20_pc13.bin якщо ви часом не в курсі, нагадаю що весь шлях до каталогу з файлом повинен бути прописаний англійськими літерами без кирилиці, це , доречі , потрібно запам’ятати при роботі з мікроконтролерами щоб не робити дурних помилок.
Тиснемо клавішу Next і споглядаємо зелененький прогрессбар — поздоровляю, все вийшло — тепер всі складні маніпуляції з підготовки Blue Pill до роботи з Arduino IDE закінчилися. Повертаємо перемички з програмуємого стану до робочого — тобто BOOT0 і BOOT1 в режим 0. І поки ми плату Blue Pill залишимо в спокої.
Допиляємо Arduino IDE .
Сама по собі Arduino IDE не заточена під STM32, але за допомогою ентузіастів, її вдалося подружити з в тому числі Blue Pill, і це нас цілком влаштовує.
Скачайте архів для Arduino IDE, спеціальне STM32 ядро також можна завантажити і звідси : STM32.zip і куди-небудь його розархивуйте. Далі треба скопіювати розархивовані файли та папки до основного дерева програми Arduino IDE тобто туди де встановлена Arduino IDE.
Якщо ви все інсталювали по замовчуванням то треба шукати папку приблизно за таким шляхом.
С:\Program Files (x86)\Arduino\hardware\
Якщо ви змінювали папку інсталювання, потрібно знайти.
………………..\Arduino\hardware\
та покласти сюди все що розпакувалося з архіву.
Далі треба знайти драйвера для вінди в папці приблизно за таким маршрутом ………………….Arduino\hardware\Arduino_STM32\drivers\win
.Якщо ви все інсталювали по замовчуванням то
С:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\drivers\win\
файл який називається «install_drivers.bat» та запустити його від імені адміністратора.
Далі запускаємо Arduino IDE та через менеджер плат 
Тут потрібно ядро для платы Arduino Due. Вибираємо останню версію та тиснем «установка»
в мене вже встановлена тому вікно не активне. Далі найцікавіше — чомусь все працює як сі хоче та не хтить як воно тре. Для великого розчарування достатньо підключити USB до компьютера і зрозуміти що все було даремно.
В диспечері пристроїв в кращому випадку буде якийсь не зрозумілий порт і ніякого COM і близько немає. Я сам в цьому місці витратив купу часу та нервів в пошуках істини, тому не треба йти цим шляхом.
Танці з бубном для COM порта Blue Pill .
Діємо як обізянки — просто прошиваємо пробний скетч в плату через незрозумілий порт. Для цього підключаємо нашу STM32 через USB кабель. Скачуємо наприклад цей скетч
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the Uno and
Leonardo, it is attached to digital pin 13. If you’re unsure what
pin the on-board LED is connected to on your Arduino model, check
the documentation at http://arduino.cc
This example code is in the public domain.
modified 8 May 2014
by Scott Fitzgerald
Modified by Roger Clark.
www.rogerclark.net
for Maple mini 25th April 2015 , where the LED is on PB1
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin PB1 as an output.
// pinMode(PB1, OUTPUT);
pinMode(PC13, OUTPUT);
Serial.begin(9600);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(PC13, !digitalRead(PC13)); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
Serial.println(» свiтло «);
// digitalWrite(PB1, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
if(digitalRead(PC13))
{
Serial.print(» темно «);
}
}
Blink_blue_pill та відкриваємо його в Arduino IDE. вибираємо плату відповідно до купленої 
можна ту або наприклад цю

та спосіб завантаження скетчу в плату 
на даному етапі COM порт відсутній як класс. Завантаження з першого разу може не пройти. Напише про відсутність незрозумілого порту. Набираємось терпіння та пробуємо вгадати момент коли программа скомпілюється. Треба щоб в цей момент пройшло перезавантаження плати Blue Pill . Треба трохи раніше тиснути кнопку ресет на платі ніж закінчиться компіляція. З якогось разу в Вас вийде і Arduino IDE напише завантаження успішне — це і є момент істини.

Може доведеться витягнути і повторно ввімкнути USB роз’єм, але то вже деталі. В диспетчері пристроїв та в самій Arduino IDE з’явиться COM порт плати Blue Pill . Запускаєм монітор порту та крім мигання світлодіоду бачимо такий лістинг.
з цього моменту можна вважати успішними ваші танці з бубном навколо плати Blue Pill та Arduino IDE .
Анонс майбутньої серії статей по Blue Pill в Arduino IDE .
Далі до вашої уваги буде розбір архітектури периферії. Спрощення входу в STM32 через адаптацію деяких моментів. Налаштування базових регістрів шляхом прямого запису потрібної конфігурації. Справа у тому, що я сам на мій погляд не виправдано витратив купу часу просто на те щоб налаштувати вихід на роботу з 5 вольтами. Це виявилось дійсно не так легко як хотілось би. Я розумію, що є спеціальне програмне забезпечення яке спрощує цю процедуру. Але так вийшло, що в мене була готова працююча програма на Arduino Mega в Arduino IDE і треба було адаптувати її під STM32.
Складності регістрів та бітових операндів мене не лякали. Адже був старий та вже майже забутий етап ще з ранніх AVR мікроконтролерів. Тоді все працювало ще на ассемблері а с++ тільки намагався залізти своїм носом і то скоріше невдало. Все через невиправдано великий та тяжкий код. Тому маю надію мої готові рішення допоможуть декому стартанути в серйозний мікроконтролер з бокової хвіртки.
Ще мене дуже вибішує закриття інфорресурсу російськомовного в напрямку електроніки. Адже я добре розумію що більшість тих хто користується Arduino IDE не може прочитати англомовний даташит. Точніше напевне не так : більшість тих хто починає програмувати Arduino зупиниться на можливостях Arduino Mega . Навіть не дійшовши до моменту можливих налаштувань переривань на будь якому піні . Це — тому що для цього потрібно не тільки читати даташит а й розуміти що в ньому пише.
Програмування ж на рівні бітів та регістрів хоч не хоч привчає до того моменту що це не страшно. Можна інколи а мона і не інколи ломати логіку роботи програми. Також мона використовувати прямий доступ до бітів та регістрів. І це набагато швидше ніж очікувати що хтось напише прийнятну бібліотеку.
