﻿
Pozor, verze  PDF, při tisku přidává číslování stránek, které je třeba vymyzat z programu

Jednoduche programy pro zakladni seznameni s STM32Duino  pro klub ETC22 na ČVUT - FEL 
J.Fischer 2.12.2024, 
Jazyk Wiring pro STM32G030J6 s 8-mi vývody  v pouzdre SO8
Z de se zatim vyuziva zakladni varianta programovani, takze  lze vyuzit literaturu pro programovani Arduino
vsechny piny  (c. 1, 4, 7) lze vyuzit jako digitalni vstupy/vystupy nebo i analogove vstupy
pin c.8 PB5 s funkci BOOT muzeme vyuzit jen jako digitalni vystup pro LED,
 protoze zde je navic pripojen rezistor 470 R na VDD (+3,3 V),
 ktery zajisti po zapnuti napajeni prechod do BOOT

Tyto programy zde zatím nevyuzivaji rozsirene moznosti programovani STM32 v STM32Duino, 
jako je napr. vyuziti dalsich periferii,programovani pres registry procesoru,....


Pokud by se vyuzily programy urcene primo pro Arduino, pak plati vztah prirazeni
Piny na STM32G030J6M6v pouzdře SO8 s 8 piny.
pin c.1   PB_7,  D13  /A9 (konverze  STM32 na  Arduino); 
pin c.4   PA_0, // D0  /A0 ;   
pin c.7   PA_13,  // D6   /A5
pin c.8   PB_5,   // D11    ( v nasi desce muzeme vyuzit pouze jako vystup, protze zde mame LED)


na pouzdre  STM32G030 je tzv Multibond, tedy na jeden pin je pripojeno vice kontaktu z cipu 
( z nichz jako vystup muzeme vyuzit pouze jediny)
cislo pinu     Brany pripojene  na pin
pin c.1   PB_7, PB8, PB9,PC14
pin c.4   PA_0, PA1, PA2, PF2-NRST
pin c.7   PA_13
pin c.8   PB_5, PB6, PA14-BOOT0, PA15   

Pozn.: Pin. c.4 ma take funkci reset, ktera je aktivovana pouze pri zapnuti napajeni, 
pokud pro zapnuti napajeni zde bude nizka uroven napeti " LOW, procesor zustane "viset"
 ( zastavi se) ve stavu reset, dokud se uroven LOW neodpoji

Na PIN  c.4 proto pripojujeme modrou LED1, na niz bude (pusobenim vnitrniho pull -up rezistoru) v okamziku restet 
dostatecne velke napeti,ktere nezpusobi pozdrzeni ve stavu RESET

Celkovy reset zajistujeme vypnutim a zapnutim napajeni. 
Pro spolehlive vybiti el.kondenzatoru zapojime mezi GND a VDD (+3,3 V) vybijeci rezistor ( napr. 470 Ohmu az 2k2)
Pro uvedeni do stavu BOOT na pin c. 8 pripojime pull- up rezistr 470 Ohmu 
(stejna hodnota, jako ma reistor u LED pripojene na pin c.)


UART Tx na pinu c. 4   - tak, jako to je jiz v osciloskopu
UART Rx na pinu c.5

zakladni blikaci (cervena) LED na pinu c.8  PB5
doplnkova MODRA LED1 na pinu č.4   PA0

BUZZER pres rezistor 470 R a 2k2 pin c. 1 PA13

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


// PROGRAM_1 

/*
  STM32G030J6 Blikani LED, pripojena na pin. c. 8, PB5, jako Arduino D11

 program v jazyce Wiring - stejné jako pro Arduino
*/

// inicializace, probehne jednou

void setup() {           // inicializace digitaliho pinu D11 pro LED   jako vystupu
 pinMode(D11, OUTPUT);
}

// nekonecna smycka

void loop() {
 digitalWrite(D11, HIGH); /* LED ON (privede vysokou uroven HIGH napeti High -u STM32  to je cca 3,3 V */
 delay(500);  // cekej 500 milisekund
 digitalWrite(D11, LOW); //  LED OFF privede nizkou uroven napeti  LOW
 delay(500);  //  cekej 500 milisekund
}


xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx

// PROGRAM_2

/*
  STM32G030J6 Blikani dvema LED v protifazi
 pripojene na pin. c. 8, PB5 (jako Arduino D11) a pin c.4  PA0 jako (Arduino D0)
 program v jazyce Wiring - stejné jako pro Arduiuno
*/

# define LED  PB5 // PB5 si pojmenujeme jako LED
# define LED1  PA0 // PA0 si pojmenujeme jako LED1

// inicializace, probehne jednou

void setup() {
  pinMode(LED, OUTPUT); /* pro funci "tone" neni třeba inicializovat, ale digitalWrite(LED_, LOW)  Ano */

  pinMode(LED1, OUTPUT); /* pro funci "tone" neni třeba inicializovat, ale digitalWrite(LED_, LOW) ano */
}

// nekonecna smycka
void loop() {
  digitalWrite(LED, HIGH); /*LED ON (privede vysokou uroven  napeti HIGH (cca 3,3 V) */
  digitalWrite(LED1, LOW); /* LED1 OFF (privede nizkou uroven napeti LOW (cca 0 V) */
  delay(500);  // cekej 500 milisekund
  digitalWrite(LED, LOW); 
  digitalWrite(LED1, HIGH); 
  delay(500);  //  cekej 500 milisekund
}

xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxx

 // PROGRAM_3

/* Blikani LED na PB5 ve stupnich jasu pomoci "analogWrite" meni jas LED na PB5 na č. 8 
 v 5 stupnich, LED1 na PA0 blikne na zacatku cyklu */
# define LED  PB5  // pin č. 8, PB5, take jako D11 Ardu 
# define LED1 PA0 // pin  c. 4 PA0 si pojmenujeme jako LED1

// inicializace, probehne jednou
void setup() {
  pinMode(LED, OUTPUT); /* pro funci analogWrite neni třeba inicializovat, ale digitalWrite(LED_, LOW) Ano */
  pinMode(LED1, OUTPUT); /* pro funci "tone" neni třeba inicializovat, ale digitalWrite(LED_, LOW) Ano */
}

void loop() {
  digitalWrite(LED1, HIGH); // bliknuti LED1 na PA0 na zacatku cyklu
  delay(1000);   // prodleva v cyklu pouza 1sekunda 
  digitalWrite(LED1, LOW); 
  analogWrite (LED, 1);
  delay(1000);
  analogWrite (LED, 5);
  delay(1000); 
  analogWrite (LED, 20);
  delay(1000); 
  analogWrite (LED, 70);
  delay(1000); 
  analogWrite (LED, 250);
  delay(1000);
  analogWrite (LED, 0); 
}


xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx

// PROGRAM_4

/* Blikani LED na PB5 pomoci funkce tone 
 LED1 na PA0 blikne na konci cyklu */

# define LED PB5 // pin č. 8, PB5, take jako 11 Arduino 
# define LED1 PA0 // pin c. 4 PA0 si pojmenujeme jako LED1

// inicializace, probehne jednou
void setup() {
  pinMode(LED1, OUTPUT); 
  // pinMode(LED, OUTPUT); // pro funci "tone" neni třeba inicializovat,
}


void loop() {
  tone(LED, 8, 1500);  // LED blika frekvenci 8 Hz po dobu 1500 ms
  digitalWrite(LED1, LOW); // LED1 ON 
  delay(1500);  // cekej 1500 milisekund
  digitalWrite(LED1, HIGH); //  LED1 OFF
  delay(1500);  //  cekej 1500 milisekund
}



xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx

// PROGRAM_5

/* Blikani LED na PB5 pomoci funkce tone, LED1 na PA0 blikne na konci cyklu,
 po ukonceni blikani vynutime zhasnuti LED na PB0,  i kdyby na pinu LED zustalo HIGH z funkce tone */

# define LED PB5 /* pin č. 8, PB5,  musime inicializovat, abychom mohli vynutit zhasnuti po noTone */ 
# define LED1 PA0 // pin c. 4, PA0 

void setup() {
  pinMode(LED1, OUTPUT); 
  pinMode(LED, OUTPUT);
}


void loop() {
  tone(LED, 8);  // LED blika frekvenci 8 Hz dokud se nevypne  blikani
  digitalWrite(LED1, LOW); // LED1 ON 
  delay(1500);  // cekej 1500 milisekund
  noTone (LED); // konec funkce tone - vypnuti blikani
  digitalWrite(LED, LOW); /* vynutime zhasnuti LED po ukonceni funkce tone, 
                           pokud by tam zustala uroven HIGH v okamziku po provedeni noTone */
  digitalWrite(LED1, HIGH); //  LED1 OFF
  delay(1500);  //  cekej 1500 milisekund
}
xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx

// PROGRAM_6

/* blika LED a vypisuje počet cyklu na UART a terminal */
# define LED  PB5 // pin č. 8, PB5 SO8 STM32G030J6
# define LED1 PA0 // pin č. 4, PA0 SO8 STM32G030J6

HardwareSerial Serial1 (PA10_R, PA9_R);
/* UART na remap. pinech č. 5 a 6 na STM32G030J6 pouzdro SO8
   kanal UART1 je na branach PA10 a PA9, ale pro pouzdro SO8 
	musime oznacit, ze se ma pouzit remapovani */

void setup() {

  Serial1.begin(9600);

  pinMode(LED, OUTPUT); //
  pinMode(LED1, OUTPUT); 

  delay (3000);  //  prodleva 3 sekundy , abychom stacili zapnout serial terminal
              //   u verze Arduino 2.3.3 muze byt serial interni terminal zapnut stale
  Serial1.println("AHOJ");  
 }
 int pocet= 0;
void loop() {
  pocet ++;
  digitalWrite (LED, HIGH); // blikni LED1
  delay(500);
  digitalWrite (LED, LOW); // zhasni LED1
  delay(500);
 
  Serial1.print("pocet cyklu= "); 
  Serial1.println(pocet); 
  }
xxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx



// PROGRAM_7

/* Nastaveni LED1 podle UARTU, blikani LED podler UARTU  prijima znaky z UART -psane 
na klavesnici , pri "1" rozsvoti LED1 na PA0, ostani zhasne LED1na PA0, 
LED na PB5 blikne podle cisla, 1 bliken 1x,  2 blikne 2x, znaky mensi nez "0" 
bliknou 1x, 
znaky vyssi než 9 bliknou 9x, pismena bliknou 9x 
vypisuje znak, ktery prisel */

# define LED  PB5 // pin č. 8, PB5 SO8 STM32G030J6
# define LED1  PA0 // pin č. 1, PA0 SO8 STM32G030J6

HardwareSerial Serial1 (PA10_R, PA9_R);    
/* UART na remap. pinech č. 5 a 6 na STM32G030J6 pouzdro SO8
   kanal UART1 je na branach PA10 a PA9, ale pro pouzdro SO8 musime oznacit, ze 
se ma pouzit remapovani */


 void setup() {
  Serial1.begin(9600);
  pinMode(LED, OUTPUT); // PB5 pin. c.8
  pinMode(LED1, OUTPUT); // PA0 pin c.4 
  }
 
 int poc= 0;

 char znak =0;
 void loop()  
{ 
 if (Serial1.available() >0) 
  {
     Serial1.print ("prislo=");
    znak = Serial1.read ();
    Serial1.println (znak);
      if (znak == '1') // nebo (znak == 0x31)
    {
      digitalWrite (LED1, HIGH);
    }
      else  
    {  digitalWrite (LED1, LOW);
    }
  if (znak <= '1') 
   {  poc= 1;   }
    else if
    (znak >= '9')
    {  poc= 9;   } 
    else
    {  poc= znak - '0';   } 
   blikej (poc);
  }
} // nize je nase funkce blikej
   void blikej (int opak)    {
     while ((opak)>0)  {

  digitalWrite (LED, HIGH); // blikni LED
  delay(500);
  digitalWrite (LED, LOW); // zhasni LED
  delay(500);
  opak--;
    }
    }
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx


// PROGRAM_8

/*
Na zacatku blikne LED a vypise AHOJ, 
Nastaveni LED1 podle UARTU, blikani LED podler UARTU  prijima znaky z UART -psane na klavesnici , pri "1" rozsvoti LED1 na PA0, ostani zhasne LED1na PA0, 
LED na PB5 blikne podle cisla, 1 bliken 1x,  2 blikne 2x, znaky mensi nez "0" bliknou 1x, 
znaky vyssi než 9 bliknou 9x, pismena bliknou 9x 
vypisuje znak, ktery prisel */

# define LED  PB5 // pin č. 8, PB5 SO8 STM32G030J6
# define LED1  PA0 // pin č. 4, PA0 SO8 STM32G030J6

HardwareSerial Serial1 (PA10_R, PA9_R);/* UART na remap. pinech č. 5 a 6 na STM32G030J6 pouzdro SO8 */
   /* kanal UART1 je na branach PA10 a PA9, ale pro pouzdro SO8 musime oznacit, ze se ma pouzit remapovani */

 void setup() {
  Serial1.begin(9600);
  pinMode(LED, OUTPUT); // PB5 pin. c.8
  pinMode(LED1, OUTPUT); // PA0 pin c.4 
  digitalWrite(LED, LOW); // LED1 ON 
  delay(1500);  // cekej 1500 milisekund
  digitalWrite(LED, HIGH); //  LED1 OFF
  delay(1500);  //  cekej 1500 milisekund
  digitalWrite(LED, LOW); // LED1 ON 
  Serial1.print ("AHOJ");
  }
 
 int poc= 0;   // nase promenna pro pocet opakovani
 char znak =0;   // nase promenna pro ulozeni prijateho znaku

 void loop()  
{ 
 if (Serial1.available() >0) 
  {
     Serial1.print ("prislo=");
    znak = Serial1.read ();
    Serial1.println (znak);
      if (znak == '1') // nebo (znak == 0x31)
    {
      digitalWrite (LED1, HIGH);
    }
      else  
    {  digitalWrite (LED1, LOW);
    }
  if (znak <= '1') 
   {  poc= 1;   }
    else if
    (znak >= '9')
    {  poc= 9;   } 
    else
    {  poc= znak - '0';   } 
   blikej (poc);
  }
} /* tady je konec hlavni smycky, nize je nase funkce "blikej", vstupni parametr ma pocet bliknuti */

   void blikej (int opak)    
  {
     while ((opak)>0) // opakuje, dokud je promenna opka vetsi nez nula
   {
    digitalWrite (LED, HIGH); // blikni LED
    delay(250);
    digitalWrite (LED, LOW); // zhasni LED
    delay(250);
    opak--;  // pocitadlo bliknuti
    }
  }


xxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx


// PROGRAM_9

/* vPipani funkci pip, ktrera vyuziva funkci "tone", pri kazdem pipnuti blikne take LED- na PB5
 LED1 na PA0 na funkci blik,   */

# define LED  PB5 // pin č. 8, PB5 SO8 STM32G030J6
# define LED1  PA0 // pin č. 4, PA0 SO8 STM32G030J6
# define BUZ  PA13 // pin č. 7, PA13 SO8 STM32G030J6
void setup() {

  pinMode(LED, OUTPUT); 
  pinMode(LED1, OUTPUT); 
}
void pip (int vyska, int delka)   /*nase funkce pro pisknuti na pinu BUZ ,
                                    to je PA13, se vstupnimi parametry */
  {
  tone(BUZ, vyska, delka); 
  digitalWrite(LED, HIGH); 
  delay(delka/2);
  digitalWrite(LED, LOW);
  delay(delka/2);
  }

void blik (void)  /*nase funkce ( bez vstupnich parametru)  pro bliknuti LED na PB5, pin. c. 8 */
{
  digitalWrite(LED1, HIGH); // 
  delay(100);
  digitalWrite(LED1, LOW); // blikni LED1
  delay(300);
  }

void loop() {

  blik ();  // volame funkci blik
  pip (500, 500);
  
  blik();
  pip (1000, 500);  /* volame funkci pip a predavame paramety 1000 Hz,500 ms*/
  blik();  
  pip (1500, 500);
  blik();  
  pip (2000, 400);
  blik();  
  pip (2500, 400);
  blik();  
  pip (3000, 400);
  blik();  
}


xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx


// PROGRAM_10

/*  STM32G030J6 v SO8, Pipani s funkci , na zacatku blikne LED1 na PA0 pin. c 4.
pak pisti buzzer nizsi  frekvenci a sviti LED PB5 na c.8, pak pisti vyssi frekvenci a LED zhasne 
*/

# define LED  PB5 // pin č. 8, PB5 SO8 STM32G030J6
# define LED1  PA0 // pin č. 4, PB5 SO8 STM32G030J6
# define BUZ  PA13 // pin č. 7, PA13 SO8 STM32G030J6
void setup() {

  pinMode(LED, OUTPUT); 
  pinMode(LED1, OUTPUT); 
}


void loop() {
digitalWrite (LED1, HIGH); 
  delay(200);
  digitalWrite (LED1, LOW); 
  delay(200);
  tone (BUZ, 1000); 
  digitalWrite (LED, HIGH); 
  delay(500);
  noTone (BUZ);
  delay(500);
  tone (BUZ, 1500); 
  digitalWrite(LED, LOW); 
  delay(500);
  noTone (BUZ);
  delay(500);


}

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
