U osnovi ovog razvojnog sistema Nucleo-F401RE kompanije ST, u seriji Nucleo-64 nalazi se STM32F401RE ARM 32-bit Cortex-M4 CPU sa FPU. U njemu je i Adaptive real-time accelerator (ART Accelerator) koji omogućava trenutno izvršavanje koda iz 512 kb Flash memorije. CPU radi na 84 MHz i implementirane su DSP instrukcije.
Na ploči je postavljen Arduino Uno V3 konektor i ST Morpho header-i koji omogućavaju povezanje velikog broja dodatnih funkcionalnih pločica i šildova.
Za programiranje nije potreban dodatni prob, jer se na sistemu nalazi integrisani ST-LINK debugger/programmer.
ST je za programiranje razvio moćan, na Eclipse-baziran IDE, pod imenom STM32Cube IDE, veoma sličan onome što smo videli kod TI i njihovog Code Composer Studio-a.
Da bi bi stekli prvi utisak ovom razvojnom sistemu, koristili smo Arduino razvojni sistem, sa tim da je u polju preferences/“Additional Boards Managers URLs“ potrebno upisati:
https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
Tako ćete konfigurisati podršku Arduino IDE-a za rad sa Nucelo 64 pločama. Potrebno je i u Board manager-u dodati “STM32 MCU-based boards by STMicroelectronics” paket za kompletne biblioteke.
Mali projekat je bio baziran na Sparkfun HC-SR04 ultrazvučnom senzoru udaljenosti. Pin 13 smo povezali sa trigger pinom senzora, pin 12 sa echo pinom, dok su PWM izlazi 11 i 10 korišćeni za pokretanje dioda. Primer je jednostavan. U zavisnosti od udaljenja objekta menjaju se intenziteti sijanja dioda. Ukoliko je objekat dalje od 24 cm, gori zelena dioda, kako se objekat približava do 10 cm, zelena dioda se polako gasi. Nastavkom približavanja crvena dioda sve više sija, i najzad, kada je predmet bliži od 4 cm, i crvena i zelena dioda trepere.
Na serijskom portu se sve vreme ispisuje očitana vrednost udaljenja sa senzora.
#define trigPin 13 // digitalni izlaz D13
#define echoPin 12 // digitalni izlaz D12
#define ledCrvena 11 // PWM izlaz 11
#define ledZelena 10 // PWM izlaz 10
float duration, distance;
double sjaj;
int k=0;
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledCrvena, OUTPUT);
pinMode(ledZelena, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(4);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 2.91;
if (distance < 100 && distance >30) {
sjaj=map(distance,30,100,0,255);
analogWrite(ledCrvena,255-sjaj);
analogWrite(ledZelena,0);
}
if (distance >= 100 && distance <240) {
sjaj=map(distance, 100,240,0,255);
analogWrite(ledCrvena,0);
analogWrite(ledZelena,sjaj);
}
if (distance >= 240){
Serial.println("Predaleko");
analogWrite(ledCrvena,0);
analogWrite(ledZelena,255);
}
else if (distance <= 30){
Serial.println("Preblizo");
Serial.println(k);
switch (k) {
case 0: {analogWrite(ledCrvena,0);analogWrite(ledZelena,255);k=1;delay(100); }
break;
case 1: {analogWrite(ledCrvena,255);analogWrite(ledZelena,1);k=0;delay(100); }
break;
}
}
else {
Serial.print(distance);
Serial.println(" mm");
}
delay(10);
}