Download as pdf or txt
Download as pdf or txt
You are on page 1of 49

U NIVERZITET U T UZLI

FAKULTET ELEKTROTEHNIKE

Arhitektura STM32F4xx ARM Cortex M4


MCU, GPIO

Dr. Sc. Asmir Gogić, docent

Tuzla, 2018
P-I P-II P-III P-IV P-V P-VI

Cilj kursa - TK402

Upoznati se mikrokontrolerima opšte namjene u cilju rješavanja problema


digitalne obrade signala, prijenosa/zaštite/prikaza informacija, upravljanja
aktuatorima u realnom vremenu.
Fokus ARM Cortex Mx serija mikrokontrolera (konkretnije M4) opšte namjene
sa podrškom za DSP i FPU operacije.
Ispit se sastoji od 60% bodova predispitnih aktivnosti - realizovanih kroz zadaće
i završnog ispita projekta koji nosi 40 % bodova.
Prezentacija/odbrana projekta je u prvom terminu završnog ispita1 .
Studenti će raditi pet (5) provjera znanja ukupno 60 bodova (kviz (5b) +
praktično(7b)), na auditornim/laboratorijskim vježbama.
Završni ispit će biti projekat 40 bodova.
Prijava teme2 projekta je u 12-toj sedmici
Predznanje: ANSI C993 , osnove programiranja, signali i sistemi, osnovi
elektronike...

1
studenti vraćaju hardware nakon prvog završnog roka
2
odabiri teme po slobodnoj volji
3
Ili bilo koja verzija C-a
P-I P-II P-III P-IV P-V P-VI

Šta je - MCU

Mikrokontroler predstavlja kompleksan integrirani sklop koji uključuje procesor


opšte namjene (CPU), memoriju (Flash, SRAM, FRAM, EERPOM), digitalni IO
interface (GPIO) i analogne module (ADC/DAC/COMP/AMP/CAP),
komunikacijske (žičane i bežične) module (UART/SPI/I2C/I2S/
SDIO/DCMI/ETH..., TIMER, RTC, FPU, DSP, DMA), FPGA/CPLD blokove i
izvore takt impulsa.
P-I P-II P-III P-IV P-V P-VI

Zašto MCU

Zašto i gdje koristiti Mikrokontroler (MCU)?


P-I P-II P-III P-IV P-V P-VI

Svjetski udio u proizvodnji MCU’s

Globalno elektroničko tržište generira/proizvede preko 20


milijardi ured̄aja baziranih na MCU.
Od ukupnog broja elektroničkih ured̄aja baziranih na
procesorima ili mikrokontrolerima, mikrokontroleri predstavljaju
99% tržišta.
Prednosti: visoka efikasnost (M4 1.25 DMIPS/MHz (Dhrystone
2.1), 33µW/M Hz), jednostavni za upotrebu, niska cijena, širok
spektar integriranih modula, napredni determinizam...
Za razliku od procesora (CPU), MCU uključuje sve neophodne
module za samostalnu funkcionalnost.
CPU arhitekture: von Neuman i Harward sa RISC ili CISC
instrukcijskim setovima.
Širok spektar CPU arhitektura: ARM, AVR, TI, MIPS (PIC), x86,
x64, ...
P-I P-II P-III P-IV P-V P-VI

Svjetski udio u proizvodnji MCU’s


P-I P-II P-III P-IV P-V P-VI

Svjetski udio u proizvodnji poluprovodničkih komponenti za auto


industriju
P-I P-II P-III P-IV P-V P-VI

Benchmark programi za mjerenje performansi CPU-a

1972 Dhrystone Reinhold P. Weicker - sintetička testna aplikacija


ciljano dizajnirana da statistički obnaša opterećenje procesora za
odred̄eni set programa.
Ne sadrži floating point operacije i u osnovi mjeri integer performanse
CPU-a.
2009 CoreMark - testna aplikacija razvijena do strane Embedded
Microprocessor Benchmark Consortium za mjerenje performansi
CPU-a na bazi izvršenja stvarnih a ne sintetičkih algoritama.
Dhrystone omoguće pored̄enje različitih platformi RISC i CISC.
Vjerodostojniji uvid u performanse CPU-a jer osigurava informaciju o
broju izvršenih iteracija programa u jedinici vremena.
DMPIS je vrijednost Dhrystone skalirana sa 1757 što predstavlja broj
Dhrystone-a na DEC VAX 11/780 iz 1970 godine.
Dhrystone je podložan utjecajima performansi kompajlera i nivoa
optimizacije.
DMIPS/MHz - omogućuje pored̄enje performansi neovisno o frekvenciji
CPU-a
P-I P-II P-III P-IV P-V P-VI

SGS Thompson Microelectronics - STM ARM Cortex MCU’s


P-I P-II P-III P-IV P-V P-VI

Atmel - ARM Cortex MCU’s


P-I P-II P-III P-IV P-V P-VI

Texas Instruments
P-I P-II P-III P-IV P-V P-VI

STM32F103C4T6B DIE - 2854x3123µm


P-I P-II P-III P-IV P-V P-VI

Programiranje

Moguće izvoditi na bazi


Jezika višeg nivoa: Visual Studio .NET, C#, Java, C++,
Matlab,...
Skriptnih jezika: Phyton, JavaScrip, Lua, TCL,...
Proceduralnih jezika: C jezik, Fortran, Pascal, Basic,...
Asemblera4
Efikasnost generiranog koda zavisi od kompajlera (nivoa
optimizacije speed/size) i same kompleksnosti programa.
Generalno, najveća efikasnost se postiže pisanjem programa u
asembleru i upotrebom hardverski modula.
Programiranje u asembleru nije za svakog! Izvod̄enje
jednostavnih operacija u višim jezicima je ponekad u asembleru
nekoliko stotina linija koda.
C jezik predstavlja kompromis izmed̄u efikasnosti koda i
vremena uloženog za implementaciju željene funkcionalnosti.
4
Razlikuje se od mašinskog programiranja po tome što se stvarne vrijednosti instrukcija - hex vrijednosti,
zamjenjuju simboličkim imenima.
P-I P-II P-III P-IV P-V P-VI

Generiranje koda

SOURCE FILES STRUKTURA OBJEKTNOG FILE-a


*.c, *.h
TEXT: DATA:
Izvršni kod i lokalne Inicijalizirane globalne
varijable i statičke varijable
Odstranjanje svih Kod i lokalne varijable
KORAK 1 C PROCESSOR predprocesorskih (#)
direktiva, konstanti, makroa
STACK: BSS:
Varijable i podaci kreirane Neinicializirane globalne
tokom izvršavanja i static varijable
Validacija sintakse koda,
generiranje objektnog koda koda i poziva funkcija
KORAK 2 COMPILER
podijeljenog u segmente

Kreiranje relokabilnog file-a, ORGANIZACIJA MEMORIJE


KORAK 3 LINKER linkanje ekternih funkcija
varijabli, biblioteka 0x08000000
FLASH:
0x080FFFFF

RAM: 0x20000000
Dodjeljivanje fizičkih adresa,
KORAK 4 LOCATOR varijablama kao i izračun 0x2001FFFF
relativnih skokova
PERIPHER: 0x40000000
0x5FFFFFFF

EXECUTABLE FILES Generiranje izvršnih,


KORAK 5 file-ova u različitim
*.elf, *.hex, *.bin formatima
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407 - Blok dijagram


P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407 - Blok dijagram


P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Sabrinice

STM32F4xx ARM Cortex M4 MCU uključuje 32-bitnu višeslojnu


AHB Matricu koja povezuje
osam master modula - CPU I-Bus, D-Bus and S-Bus,
DMA1 i DMA2 Memory bus, DMA2 peripheral bus, Ethernet
& USB bus
sedam slave modula - Internal memory I-Code & D-Code
bus, Main and Auxiliry SRAM bus, AHB1 & AHB2
peripherals, FSMC bus.
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Sabirnice/Trase/Bus

AHB1 - Advance High performance Bus taktovana na 150 MHz


64 kB Core Coupled SRAM-a dostupan samo preko CPU a
ostatak 128 kB5 dostupno za DMA transakcije i periferale.
I-Code bus: CPU trasa za prikupljanje instrukcija, vektora6 iz
memorijskog prostora (0x00000000 - 0x1FFFFFFF). U osnovi
služi za prikupljanje instrukcija iz interne ili eksterne memorije.
D-Code bus: CPU trasa za pristup podacima i interfejsu za
debagiranje iz memorijskog prostora (0x00000000 -
0x1FFFFFFF). U osnovi služi za učitavanje literala i kod
debugiranja. Pristup kodu ili podacima iz interne ili eksterne
memorije.
S-Bus: CPU trasa za prikupljanje instrukcija, vektora, podataka i
pristup interfejsu za debagiranje iz memorijskog prostora
(0x20000000 - 0xDFFFFFFF, 0xE0100000 - 0xFFFFFFFF). U
osnovi osiguran pristup CPU-a periferalima.
5
Ukupno 192 kB SRAM kod STM32F407VGT6 verzije
6
Prikupljanje instrukcije koje operiraju nad vektorom podataka kao i prikupljanje samih vektora podataka
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Sabirnice/Trase/Bus

AHB2 i AHB3 - taktovane na 168 MHz.


APB1 - Advance Peripheral Bus taktovan na 42 MHz
APB2 - taktovan na 84 MHz
AHB/APB bridges - postoje dva AHB/APB mosta koja povezuju
APB1, APB2 i osiguravaju sinhronu konekciju izmed̄u AHB i
dvije APB trase.
Nakon reset-a/power cycle MCU-a, svi periferalni taktovi su
onemogućeni (osim SRAM i Flash interfejsa), te je stoga
potrebno omogućiti generiranje takt impulsa za dati periferal
koristeći RCC_AHBxENR or RCC_APBxENR registre.
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Adresni prostor

Programska memorija, memorija za podatke, registri i IO portovi,


organizovani u jednom linearnom memorijskom prostoru
veličine 4GB.
STM32F4xx koristi little endian (Intel) princip storiranja
podataka u memoriju. Za primjer 32 bitne vrijednosti
0x01020304, LSB 0x04 se storira prvo.

Adresni prostor je podijeljen u osam blokova od po 512 MB.


Adresni prostor koji nije alociran za memoriju ili periferale se
označava reserved.
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Interna Flash memorija

Interna flash memorija kapaciteta 1MB organizovana je u 12


sektora.
Podržanje operacije nad flash memorijom su sector i mass
erase, shodno tome sektori su različite veličine.
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Interna Flash memorija

Podržane su operacije pisanja byte, half word i word.


Pristup memoriji odvija se preko 128-bitne sabirnice
Option bytes u flash adresnom prostoru omogućuju
mehanizam za zaključavanje pristupa (čitanje/pisanje)
sektorima,
definiranje naponskog nivoa BOR 7 modula.
aktivnost WDT 8
Zbog činjenice da je period takt impulsa CPU-a znatno manji od
vremena čitanja podatka iz flash memorije, neophodno je
podesiti odgovarajući broj WAIT STATES-a/LATENCY u Flash
Access Control Register FLASH_ACR u skladu sa CPU takt
impulsima HCLK i naponom napajanja MCU-a.
7
Brown Out Reset predstavlja mehanizam koji štiti MCU od propada napona koji ima za posljedicu narušavanje
integriteta memorije, integriteta izvršenja samog programa i dr. U osnovi BOR modul kada detektuje propad napona
ispod predefinirane vrijednosti u vremenskom periodu ≥ 100µs uzrokuje reset MCU-a
8
Modul/brojač koji po isteku resetuje MCU. Štiti izvršenje MCU softverski grešaka koje imaju za posljedicu
beskonačne petlje.
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Reset & Clock control

Radni napon STM32F4xx MCU je 3.3V (podržani radni naponi od 1.8 V do 3.6 V)
STM32F4x podržava tri tipa reset-a: system Reset, power Reset i backup
domain Reset
System reset - setuje sve registre na reset stanje osim reset flagova u clock
controller CSR registru i Backup domain registrima.
System reset se generira u jednom od sljedećih slučajeva:
NRST pin je pod djelovanjem napona niskog nivoa,
WWDT je dosegao kriterij brojanja,
IWDG je dosegao kriterij brojanja,
Softverski reset - poziv funkcije void NVIC_SystemReset(void)
Low power reset tj. reset nakon ulaska u Standby mode ili Stop mode.
Power reset generiše se u slučaju
Power-on/power-down reset (POR/PDR reset) ili BOR reset
Nakon izlaska iz Standby mode.
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Reset & Clock control

Backup Domain Reset - setuje sve RTC registre i RCC_BDCR


registar na reset vrijednosti.
Backup Domain Reset se generira u jednom od dva slučaja
Software reset
Power cycle - VDD ili VBAT je apliciran uz pretpostavku da
je napon prije dogad̄aja bio nula volti.
STM32F4xxx ima tri primarna izvora takt impulsa za
CPU/periferale:
HSI (High Speed Internal izvor baziran na RC oscilatoru,
HSE (High Speed External) izvor baziran na eksternom
oscilator (baziran na kvarcnom kristalu),
Main PLL (Phase Lock Loop) - generiranje takt impulsa za
CPU, USB, I2S
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Reset & Clock control

Dva sekundarna izvora takt impulsa


32kHz interni RC oscilator (LSI) koji služi kao izvor takt
impulsa IDWT i RTC,
32768 Hz ekterni oscilator (baziran na kvarcnom kristalu)
koji može da služi kao izvor takt impulsa za RTC.
Napajanje svakog izvora takt impulsa se može zasebno
kontrolisati s ciljem povećanja energetske efikasnosti (smanjenja
ukupne struje MCU-a).
Frekvencija eksternog HSE oscilatora mora biti u opsegu od 4
MHz do 26 MHz.
HSI je 16 MHz izvor takt impulsa implementiran sa RC
oscilatorom koji se može koristiti kao glavni izvor takt impulsa a i
kao izvor takt impulsa za PLL.
P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Reset & Clock control - structure


P-I P-II P-III P-IV P-V P-VI

Arhitektura STM32F407: Reset & Clock control - connection

HSE oscilator: frekvencija ulaznog signala 4-26 MHz, loading capacitance 15


pF, startup time 2 ms i max struja od 1 mA.
LSE oscilator: frekvencija ulaznog signala 32768 Hz, loading capacitance CL +
2 pF (stray capacitance) = max 15 pF, ostali parametri zavise od konkretnog
izvora.
Main PLL: jitter 200 ps i max struja od 0.85 mA.
HSI oscilator: tačnost ±4%, startup time 4µs i max struja od 80µA.
LSI oscilator: tačnost ±46.7%, startup time 40µs i max struja od 0.6µA.
P-I P-II P-III P-IV P-V P-VI

Razvojna ploca STM32F4 Discovery


P-I P-II P-III P-IV P-V P-VI

STM32F4xx Dokumentacija

RM0090 STM32F4 Reference manual definira kompletnu


dokumentaciju (registre i funkcionalnost) STM32F4xx serije MCU’s
sistema generiranja takta,
modova rada,
IO jedinice,
periferala,
memorijskih modula.
STM32F407 Datasheet koji definira specifičnosti konkretnog čipa
električne karateristike MCU-a,
podržane periferale,
raspodred pinova na čipu MCU-a,
matricu mapiranje IO linija prema periferalima,
radni takt CPU i veličinu memorije,
UM1473 Dokumentacija STM32F4 Discovery ploče koja uključuje
električnu shemu razvojen ploče,
raspored pinova na header-u ploče,
informacije o eksternim komponentama.
P-I P-II P-III P-IV P-V P-VI

Toolchain

Toolchain - predstavlja skup alata i biblioteka neophodnih za


kompajliranje, linkanje i generiranje izvršnog koda za
mikrokontrolera kao i aplikacije za spremanje koda u flash
memoriju mikrokontrolera.
S ciljem automatizacije procesa kompajliranja koristi se make
program.
make predstavlja aplikaciju za automatizaciju procesa izvršenja
grupe komandi ili aplikacija.
Pozivom make programa sa komandne linije, make aplikacija će
pretražiti lokalni direktoriji za file-om Makefile. U suprotnom
mora se navesti ime make file-a sa -f opcijom, ukoliko make file
ima proizvoljno ime.
P-I P-II P-III P-IV P-V P-VI

make

U osnovi Makefile se sastoji od blokova

target: dependencies
(tab) system command

Pretpostavimo da imamo dva file-a main.c i fnc.c koje trebamo kompajlirati sa


gcc. Proces kompajliranja sa komandne linije bi bio

gcc -o main main.c fnc.c

Ukoliko koristimo make struktura make file-a Makefile bi bila


all:
WWWWWgcc -o main.c fnc.c

Procedura kompajliranja bi se svela na poziv komande make u direktoriju gdje


su naši *.c file-ovi odnosno
make

Ili

make -f Makefile
P-I P-II P-III P-IV P-V P-VI

make

U našem primjeru nismo imali ograničenja/ovisnosti (dependencies) s obzirom


na druge file-ove.
Jednolinijske komentare možemo dodavati sa karakterom #
Varijable unutar make file-a možemo kreirati na jednostavan način

# Ovo je primjer komentara.


# U novom redu imamo primjer kreiranja varijabli
CC = gcc
# opcije: kreiraj samo objektne file-ove i sva upozorenja
CFLAGS = -c -Wall
# target: all sada ima dependencies
all: test

test: main.o fnc.o


WWWWW$(CC) main.o fnc.o -o test
main.o: main.c
WWWWW$(CC) $(CFLAGS) main.c
fnc.o: fnc.c
WWWWW$(CC) $(CFLAGS) fnc.c
clean:
WWWWWrm *.o
P-I P-II P-III P-IV P-V P-VI

Organizacija MWE

Svaki STM32Fxxx projekat mora sadržavati


main.c - file koji mora sadržavati implementaciju funkcije
int main(void)
stm32f4xx.h - zaglavlja koje remapira simbolička imena
svih periferala u stvarne fizičke adrese registara
mikrokontrolera.
system_stm32f4xx.c - sadrži implementaciju
void SystemInit(void) funkciju koja ima za cilj inicijalizaciju
digitalne PLL-a, tipa i izvora takt impulsa.
startup_stm32f4xx.s - startup file definira tabelu vektora
handler-a ISR-a
stm32_flash.ld - linker skriptu koja definira adrese i
veličine internog FLASH i RAM, eksterne memorije zatim
data, text, bss ostale sekcije objektnih file-ove.
Makefile - komande za automatizaciju procesa
kompajliranja, linkanja, generiranja izvršnog file i njegovo
pohranjivanje u flash memoriju.
P-I P-II P-III P-IV P-V P-VI

GPIO Port

STM32F4xx ARM Cortex M4 mikrokontrolera uključuje maksimalno 11 GPIO


(General Purpose Input Output) Portova sa po maksimalno 16 IO pinova.
STM32F407 VGT6 MCU koji se nalazi na STM32F4 Discovery Board-u, ima 6
GPIO portova: GPIOA, GPIOB, GPIOC, GPIOD, GPIOE i GPIOF.
Svaki GPIOx Port uključuje 4 konfiguracijska 32-bitna registra
GPIOx_MODER
GPIOx_OTYPER
GPIOx_OSPEEDR
GPIOx_PUPDR
Dva podatkovna 32-bitna registra i set/reset registar
GPIOx_IDR
GPIOx_ODR
GPIOx_BSRR
Lock registar i registar alternativnih funkcija oba 32-bitna registra
GPIOx_LCKR
GPIOx_AFRH
GPIOx_AFRL
P-I P-II P-III P-IV P-V P-VI

Struktura GPIO pina IO PORTA


P-I P-II P-III P-IV P-V P-VI

GPIO Registri9

GPIOx_MODER - grupe od po dva bita registra, definiraju tip IO pin-a. Funkcije


koje IO pin može imati su
00 - digitalni ulaz,
01 - digitalni izlaz opšte namjene,
10 - alternativna funkcija (pin spojen sa nekim drugim periferalom),
11 - analogni ulaz ili izlaz.
GPIOx_OTYPER - svaki bit definira tip izlaza odgovarajućeg IO pina a može biti:
[0] push-pull ili [1] open drain.

9
STM32 Reference manual p278-283
P-I P-II P-III P-IV P-V P-VI

GPIO - digitalni izlaz


P-I P-II P-III P-IV P-V P-VI

GPIO Registri

GPIOx_OSPEEDR - grupe od po dva bita registra, definiraju minimalno vrijeme


odnosno maksimalnu frekvenciju prijelaza iz High u Low stanje i obratno.
Dozovljene vrijednosti10 su:
00 - 10 MHz,
01 - 25 MHz,
10 - 50 MHz,
11 - 100 MHz.
GPIOx_PUPDR - grupe od po dva bita definiraju stanje neopterećenog pina.
Dozvoljene vrijednosti su: , pull-up, pull-down, reserved (00,01,10,11).
00 - no pull-ups/downs,
01 - pull-up,
10 - pull-down.

10
Važe samo za STM32F407VGT6
P-I P-II P-III P-IV P-V P-VI

GPIO - digitalni ulaz


P-I P-II P-III P-IV P-V P-VI

GPIO Registri

GPIOx_ODR - po jedan bit definira stanje IO pina koji je proglašen kao izlazni
pin opšte namjene.
GPIOx_BSRR - pisanje bit-a u grupi od prvih 15 bita, setuje stanje
odgovarajućeg bita. Sa druge strane, pisanje u drugoj grupi od 15 bita resetuje
stanje IO pina koji je proglašen kao izlazni pin opšte namjene.
GPIOx_IDR - po jedan bit definira stanje IO pina koji je proglašen kao ulazni pin
opšte namjene.
GPIOx_LCKR omogućuje zaključavanje trenutne konfiguracije GPIO porta.
GPIOx_AFRH i GPIOx_AFRL - grupe od po 4 bita definiraju aktivnu alternativnu
funkciju koje IO pin može imati.
U osnovi grupe od po četiri bita unutar AFR registra definiraju konkretnu
alternativnu funkciju.
Konkretna funkcija pina zavisi od binarne kombinacije/GPIO porta/pina11

11
Pogledati tabelu 7 STM32F407 datasheet na strani 56
P-I P-II P-III P-IV P-V P-VI

GPIO - alternativne funkcije


P-I P-II P-III P-IV P-V P-VI

GPIO Port - konfiguracija IO pina kao izlaz

Procedura konfiguracije IO pina na PORT-u x kao digitalni izlaz opšte namjene,


sastoji se od sljedećih koraka
1. Omogućiti pristup odgovarajućem GPIOx PORT-u na AHB1 sabirnicu
(bus) kao i generiranje takta za dati GPIOx sa AHB1ENR registrom iz
RCC (Reset and Clock Control) modula.
2. Postaviti tip IO pina u digitalni izlaz opšte namjene koristeći
GPIOx_MODER registar.
3. Postaviti karakter izlaznog IO pina koristeći GPIOx_OTYPER registar.
4. Odabrati frekvenciju tranzicije(switching-a) IO pina sa GPIOx_OSPEEDR
registarom.
5. Postaviti trenutno stanje pina sa registrom GPIOx_ODR.
Primjer inicijalizacije GPIOD porta i setovanja pina 15 u stanje logičku nulu u
main funkciji

RCC->AHB1ENR |= (RCC_AHB1ENR_GPIODEN);
//RCC->AHB1ENR |= 0x00000008;12
GPIOD->MODER |= 0x80000000;
GPIOD->OTYPER = 0x00000000;
GPIOD->OSPEEDR |= 0xC0000000;
GPIOD->ODR &= ~(0x00008000);
12
Pogledati STM32F4xx reference manual str 238
P-I P-II P-III P-IV P-V P-VI

GPIO Port - konfiguracija IO pina kao ulaz

Procedura konfiguracije IO pina na PORT-u x kao digitalni ulaz opšte namjene,


sastoji se od sljedećih koraka
1. Omogućiti pristup odgovarajućem GPIO port na AHB1 sabirnicu (bus) kao
i generiranje takta za dati GPIOx sa AHB1ENR registrom iz RCC (Reset
and Clock Control) modula.
2. Postaviti tip IO pina u digitalni ulaz opšte namjene koristeći
GPIOx_MODER registar.
3. Odabrati karakter neopterećenog IO pina koristeći GPIOx_PUPDR
registar.
4. Pročitati stanje IO pina sa GPIOx_IDR.
Primjer inicijalizacije GPIOA porta i IO pina 0 kao digitalni ulaz sa pull-up-om u
main funkciji

RCC->AHB1ENR |= (RCC_AHB1ENR_GPIOAEN)13
GPIOA->MODER &= ~(0x00000003);
GPIOA->PUPDR = 0x00000001;
uint32_t state = (GPIOA->IDR)&(0x00000001);

13
Pogledati STM32F4xx reference manual str 238
P-I P-II P-III P-IV P-V P-VI

GPIO Port - električne karakteristike

Svi GPIO I/O digitalni pinovi mogu osigurati sink/source struje do 8 mA (max).
Pull-down i Pull-up otpornici na svim GPIO pinovima su opsegu od 30-50kΩ
osim PA10 i PB12 koji imaju vrijednosti u opsegu 8-15kΩ.
Kapacitet svih I/O pinova je tipično 5 pF.
Napon histereze I/O Schmitt trigger-a je 200 mV.
P-I P-II P-III P-IV P-V P-VI

GPIO Port - primjer 1

P RIMJER 1
Na STM32F4 Disco nalaze se 4 LED diode. Napisati C program koji će manipulirati 4 LED
diode (LD3-LD6) na način da se sve četiri diode periodično uključuju i isključuju.

Napomene:
Za tačnu informaciju na kojem IO pinu i kojem GPIO portu su spojene
LED, pogledati STM32F4 Disco manual p36.
Pauze izmed̄u operacija uključivanja i isključivanja LED softverski
generirati.
P-I P-II P-III P-IV P-V P-VI

GPIO Port - primjer 1 - analiza

GCC kompajler će izbaciti svaku petlju tokom kompajliranja ukoliko ista u svom
tijelu ima samo lokalnu varijablu koju inkrementiramo.
Prvo rješenje datog problema je ukidanje optimizacije.
Posljedica: veličina koda postaje značajno veća.
Drugi način je da proglasimo brojačku varijablu cnt u petlji (sa kojom simuliramo
pauzu) kao volatile ili static.
Prefiks volatile za varijablu nagovještava kompajleru da sve dijelove koda u
kojim se pojavljuje čitanje/pisanje u date varijable, kompajler ne optimizira.
Nedostatak: generiranje pauza i uključivanje koncepta vremena u program ne
može se bazirati na softverskim emulacijama pauza/vremena jer:
Vrijeme izvršavanja instrukcija varira od platforme do platforme,
Kod kojim emuliramo pauzu biti će preveden u instrukcije procesora u
zavisnosti od nivoa i tipa optimizacije.
Ne znamo tačno vrijeme izvršavanja jednog prolaza kroz petlju.
Granulacija vremenskog koraka pauza je ograničena i varijabilna (u
zavisnosti sa opterećenjem procesora (interrupts)).
P-I P-II P-III P-IV P-V P-VI

GPIO Port - primjer 2

P RIMJER 2
Na STM32F4 Disco nalazi se plavi taster (plave push-button) koji ćemo iskoristiti za
demonstraciju funkcionalnosti GPIO pin-a kada obavlja funkciju digitalni ulaz opšte namjene.
Napisati C program koji će:

1. Uključiti sve LED diode na STM32F4 Disco razvojnoj ploči (LD3-LD6) dok je taster
pritisnut, a zatim isključiti kada je taster otpušten. Drugačije rečeno stanje LED diode mora
biti invertovano stanje tastera.
2. Uključiti sve LED diode na STM32F4 Disco razvojnoj ploči (D1-D4) kada se izvrši cijela
operacija on-off a zatim na sljedećoj on-off operaciji isključi sve LED diode. .

Napomene:
Za tačnu informaciju na koji IO pin i koji GPIO port je spojen taster,
pogledati STM32F4 Disco manual p36.
P-I P-II P-III P-IV P-V P-VI

GPIO Port - primjer 2 - analiza

Sve mehaničke i električne (tranzistori) prekidače prati prijelazni procesa iz


stanja HIGH u LOW i obratno. Dodatno, na krajevima tastera dolazi do oscilacija
napona zbog nesavršenosti dodirne površine što ima za posljedicu da taster
bude u stanju on-off par stotina puta u nekoliko milisekundi.

Oba problema možemo tretirati na način da koristimo softversko (debouncing


rutine) ili hardversko rješenje (pull-up ili pull-down sa debouncing
kondenzatorom).
Najjednostavnije rješenje debouncinga je upotreba rutina za kašnjenje. Med̄utim,
trajanje oscilacija je specifično za aplikaciju i korisnika.
Rutine za kašnjenje blokiraju izvršenje ostalih rutina i neefikasne su.
Rješenje: upotreba rutina za kašnjenje koje ne blokiraju izvršenje ostalih
procesa kao i analiza utjecaja stanja IO ulaznog pina.
P-I P-II P-III P-IV P-V P-VI

Literatura

Literatura
STM32F4xx Reference manual
STM32F4 Discovery Board User Manual
STM32F407xx Datasheet
Digital Signal Processing Using the ARM Cortex M4

You might also like