RCK Ruđera Boškovića - mobilna / uslužna robotika

Vježbe - ARM

Zadatak

Ovlaš proučiti način programiranja ARM mikrokontrolera koji se nalaze u pločicama sistema.

Datoteke

×
Koristimo STM32CubeIDE radnu okolinu. Nakon što čarobnjakom napravimo projekt za dani mikrokontroler, STM32F042G6, dobit ćemo strukturu sličnu prikazanoj na slici lijevo.

Budući da upute nisu operativne, preskočili smo niz koraka u kreiranju projekta, što ćemo činiti i dalje. Preskakati i pokazivati bitne momente.

Projekt smo nazvali "mrm-barr-can" (1). Baziran je na primjeru iz prakse, firmwareu za ML-R mrm-bar-can pločicu. Kako pločica ima samo 1 analogni izlaz, primjer će biti gotovo minimalne kompleksnosti. Analogni ulaz čita napon koji generira fototranzistor.

Generirane datoteke od interesa će biti: "main.c" (2) i "mrm-barr-can.ioc" (3).

Ostale su datoteke ili generirane čarobnjakom ili ih je napravio korisnik. Njih nećemo proučavati.

mrm-barr-can.ioc

×
Dvostruki klik na "mrm-barr-can.ioc" otvara grafički editor u kojem se postavljaju parametri čipa.

Postoje 3 nivoa programiranja ARM mikrokontrolera. Mi ćemo koristiti najapstraktniji, HAL (HAL Abstraction Layer), koji će nas najbrže dovesti do cilja.

Na desnom dijelu slike je mikrokontroler sa svojim pinovima.

Na lijevoj su funkcionalne grupe koje postavljaju parametre mikrokontrolera.

Na samom vrhu su tabovi s cjelinama najvišeg nivoa. Trenutno je izabran tab "Pinout & Configuration".

Analogni ulaz

×
Postavimo jedan pin kao analogni ulaz.

Kliknemo na pin "PB0", što će rezultirati menijem kao na slici.

Pinu možemo pridružiti razne funkcije. Svaki ima svoj skup mogućnosti.

U našem slučaju biramo "ADC_IN8", što će programirati pin kao analogni ulaz.

Konfiguracija ulaza

×
U lijevom dijelu ekrana vršimo detaljnu konfiguracije izabrane funkcionalnosti pina.

Parametri će biti primjereni analognom ulazu.

Kliknemo na "ADC" (1).

Za "IN8" (2) možemo mijenjati parametre.

Mijenjamo ih u tabu "Parameter Settings" (3). Ovdje nećemo opisivati značenje svakog.

DMA

×
Nastavimo mijenjati parametre po tabovima.

Nađemo "DMA Settings" i postavimo parametre.

NVIC

×
Na kraju postavimo interrupte u tabu "NVIC Settings".

Frekvencije

×
Frekvencije podešavamo u prozoru "Clock Configuration".

Ukratko, ulaz je 16 MHz ("Input frequency") (1) i dolazi iz kristala.

Biramo puteve i parametre tako da tih 16 MHz uzrokuje "HCLK (MHz)" (2) od 48 MHz.

Kod

×
Spremanje datoteke "mrm-barr-can.ioc" će generirati kod, između ostalog u našoj datoteci od interesa, "main.c".

Dijelovi između parova "USER CODE BEGIN..." i "USER CODE END..." će biti sačuvani, ostatak pregažen novogeneriranim kodom. Npr., bit će sačuvano sve između ove 2 linije:
/* USER CODE BEGIN PM */

/* USER CODE END PM */
Na slici lijevo je funkcija "MX_ADC_Init()", koja programira parametre pina i koja ima točno parametre koje smo postavili u "mrm-barr-can.ioc" ekranu.

Mi ih možemo mijenjati, ali svako će nova generiranje koda pregaziti naše promjene.

HAL se razlikuje od ostala 2 pristupa programiranju zato što se parametri unose grafički na jednostavan način, a kod se generira.

Ispod opisane funkcije se nalazi korisnički kod u dijelu koji počinje iza "USER CODE BEGIN 4".

Primjedbe