Ce este STM32?
Desi conform articolelor precedente, microcontrolerul ESP32 pare a fii inlocuitorul ideal al batranului AtMega328p, dar in proiectele unde conectivitatea WiFi / Bluetooth nu este necesara si avem nevoie de mai mult de un ADC (convertor analog – digital), una dintre optiunile usor de folosit pentru incepatori ar fi familia de microcontrolere STM32.
Familia de microcontrolere STM32 este dezvoltata de catre compania ST, si este divizata in 4 categorii (conform https://www.st.com/) in functie de domeniul in care este recomandata utilizarea acestora (performanta ridicata, produse in masa, aplicatii cu consum redus de energie, wireless).
Ce prezinta articolul?
In acest articol vom folosi ca exemplu un microcontroler din clasa STM32F1, mai precis STM32F103C8T6, deoarece este usor si ieftin de achizitionat, vine echipat cu un microprocesor ARM Cortex M3, are un ADC cu o rezolutie de 12 biti si multe altele.
Cu ce se diferentiaza STM32F103C8T6 (care se gaseste in placi de dezvoltare numite si „Blue Pill”) fata de AtMega328p (care se gaseste in placi de dezvoltare precum Arduino)?
* viteza este de 8MHz daca folosim cristalul intern al microcontrolerului sau pana la 16 MHz daca atasam extern un cristal de cuart;
Dezavantajele placii de dezvoltare „Blue Pill” in comparatie cu Arduino (Uno/Nano)
- Desi placa de dezvoltare Blue Pill este versatila datorita microcontolerului STM32F103C8T6, trebuie sa fim constienti de faptul ca aceasta nu vine echipata cu un convertor USB-serial, acest convertor fiind necesar programarii microcontrolerului (in caz ca nu dorim sa instalam un alt bootloader care sa foloseasca magistrala USB pe care STM32F103C8T6 o suporta).
- Inainte de a incarca cod pe aceasta placa de dezvoltare este necesar sa mutam jumper-ul BOOT0 din pozitia 0 catre 1; daca dupa o resetare, nu dorim ca acesta sa se stearga trebuie sa mutam jumper-ul BOOT0 inapoi pe pozitia 0.
Cum programam STM32F103C8T6 cu ajutorul Arduino IDE?
In primul rand avem nevoie de convertorul USB-serial despre care v-am amintit mai sus; acesta trebuie conectat in modul urmator catre placa de dezvoltare:
Convertor USB-serial -> Placa dezvoltare
GND -> GND
TX -> A10
RX -> A9
Dupa care, trebuie sa selectati tensiunea logica a convertorului serial-USB la 3.3V, altfel riscati sa avariati ireversibil placa de dezvoltare. De asemenea este necesar ca placa de dezvoltare sa fie alimentata prin portul microUSB.
Ca pasi urmatori, in Arduino IDE trebuie sa accesam FILE > PREFERENCES, iar in caseta text „Aditional Boards Manager URLs” adaugam urmatorul link:
http://dan.drown.org/stm32duino/package_STM32duino_index.json
Dupa care, trebuie sa accesam TOOLS>BOARD>BOARD MANAGER unde scriem in caseta text „STM32F1” si dam install. Daca ati realizat acesti pasi corect , ar trebui ca in lista din TOOLS>BOARD sa gasiti mesajul „Generic STM32F103C series”.
Pentru a incarca un nou cod de test pe placa de dezvoltare, selectati din lista TOOLS > BOARD „Generic STM32F103C series”, iar la Upload method selectati: „Serial”.
Pentru a testa daca sistemul este functional, puteti incerca urmatorul cod. Acesta aprinde si stinge un LED la interval de o secunda.
void setup(){
pinMode(PC13,OUTPUT);
}
void loop(){
digitalWrite(PC13,HIGH);
delay(1000);
digitalWrite(PC13,LOW);
delay(1000);
}
Dupa cum puteti observa, metoda de codare a acestei placi de dezvoltare este similara cu metoda Arduino, diferenta fiind data de denumirea pinilor.
Diagrama de conexiuni a STM32F103
Surse:
Eu inca trag de Atmega328p. La 2Mhz are consum 1.2mA.
STM32 este peste orice ATmega din punct de vedere al performantelor. Un incepator, daca are nevoie de chestii basic, dar nu vrea Atmel, poate usor sa se reorienteze spre PIC. Sa lucrezi cu STM nu e chiar atat de simplu. Mai ales pentru un incepator.
Am facut cu el un ceas, folosind RTC-ul intern, cu termometru si voltmetru – pe care l-am montat in masina.
Era mult mai interesant sa configurezi tu pinii, folosind CubeMX si sa dezvolti codul in Keil. Asa cu Arduino e destul de simplu. Dar oricum, felicitari!