9.3 TOTAL SCORE

Nucleo64 - STM32F401RE razvojni sistem

Razvojni sistem

Izuzetan 32 bitni ARM®32-bit Cortex®-M4 razvojni sistem sa Arduino kompatibilnošću.


Kvalitet izrade 10
Implementirana tehnologija 9
Lakoća korišćenja 10
Odnos cena/performanse 8
PROS
  • Izuzetno moćan CPU
  • Odlična softverska i harderska kompatibilnost
  • ST zna kako se dokumentuje proizvod
CONS
  • Nabavna cena je zbog troškova poštarine neopravdano visoka
  • Nema integracija Arduino IDE u STM32Cube IDE

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 morphio hederi 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 Energiji 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 preferances/“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 manageru dodati STM32 MCU based boards by STMicroelectronics za kompletne biblioteke.

Mali projekat je bio baziran na Sparkfun HC-SR04 ultrazvučnom senzoru udaljenosti. Pin 13 smo povezali sa triger 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 blinkaju.

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);
}