Arhitektura STM32F4xx ARM Cortex M4 MCU, GPIO...Prezentacija/odbrana projekta je u prvom terminu...
Transcript of Arhitektura STM32F4xx ARM Cortex M4 MCU, GPIO...Prezentacija/odbrana projekta je u prvom terminu...
Disclaimer: The European Commission support for the production of this website doesnot constitute an endorsement of the contents which reflects the views only of theauthors, and the Commission cannot be held responsible for any use which may bemade of the information contained therein.
Co-funded by theErasmus+ Programmeof the European Union
ARHITEKTURA STM32F4XX ARM CORTEX M4MCU, GPIO
ARHITEKTURA STM32F4XX ARM CORTEX M4MCU, GPIO
ARHITEKTURA STM32F4XX ARM CORTEX M4MCU, GPIO
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 problemadigitalne obrade signala, prijenosa/zaštite/prikaza informacija, upravljanjaaktuatorima u realnom vremenu.
Fokus ARM Cortex Mx serija mikrokontrolera (konkretnije M4) opšte namjenesa podrškom za DSP i FPU operacije.
Ispit se sastoji od 60% bodova predispitnih aktivnosti - realizovanih kroz zadacei završnog ispita projekta koji nosi 40 % bodova.
Prezentacija/odbrana projekta je u prvom terminu završnog ispita1.
Studenti ce raditi pet (5) provjera znanja ukupno 60 bodova (kviz (5b) +prakticno(7b)), na auditornim/laboratorijskim vježbama.
Završni ispit ce biti projekat 40 bodova.
Prijava teme2 projekta je u 12-toj sedmiciPredznanje: ANSI C993, osnove programiranja, signali i sistemi, osnovielektronike...
1studenti vracaju hardware nakon prvog završnog roka2odabiri teme po slobodnoj volji3Ili 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 ukljucuje procesoropšte namjene (CPU), memoriju (Flash, SRAM, FRAM, EERPOM), digitalni IOinterface (GPIO) i analogne module (ADC/DAC/COMP/AMP/CAP),komunikacijske (žicane i bežicne) module (UART/SPI/I2C/I2S/SDIO/DCMI/ETH..., TIMER, RTC, FPU, DSP, DMA), FPGA/CPLD blokove iizvore 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 elektronicko tržište generira/proizvede preko 20milijardi uredaja baziranih na MCU.
Od ukupnog broja elektronickih uredaja baziranih naprocesorima ili mikrokontrolerima, mikrokontroleri predstavljaju99% tržišta.
Prednosti: visoka efikasnost (M4 1.25 DMIPS/MHz (Dhrystone2.1), 33µW/MHz), jednostavni za upotrebu, niska cijena, širokspektar integriranih modula, napredni determinizam...
Za razliku od procesora (CPU), MCU ukljucuje sve neophodnemodule za samostalnu funkcionalnost.
CPU arhitekture: von Neuman i Harward sa RISC ili CISCinstrukcijskim 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 poluprovodnickih komponenti za autoindustriju
P-I P-II P-III P-IV P-V P-VI
Benchmark programi za mjerenje performansi CPU-a
1972 Dhrystone Reinhold P. Weicker - sinteticka testna aplikacijaciljano dizajnirana da statisticki obnaša opterecenje procesora zaodredeni set programa.Ne sadrži floating point operacije i u osnovi mjeri integer performanseCPU-a.2009 CoreMark - testna aplikacija razvijena do strane EmbeddedMicroprocessor Benchmark Consortium za mjerenje performansiCPU-a na bazi izvršenja stvarnih a ne sintetickih algoritama.Dhrystone omoguce poredenje razlicitih platformi RISC i CISC.Vjerodostojniji uvid u performanse CPU-a jer osigurava informaciju obroju izvršenih iteracija programa u jedinici vremena.DMPIS je vrijednost Dhrystone skalirana sa 1757 što predstavlja brojDhrystone-a na DEC VAX 11/780 iz 1970 godine.Dhrystone je podložan utjecajima performansi kompajlera i nivoaoptimizacije.DMIPS/MHz - omogucuje poredenje performansi neovisno o frekvencijiCPU-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
Moguce izvoditi na baziJezika 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 (nivoaoptimizacije speed/size) i same kompleksnosti programa.
Generalno, najveca efikasnost se postiže pisanjem programa uasembleru i upotrebom hardverski modula.
Programiranje u asembleru nije za svakog! Izvodenjejednostavnih operacija u višim jezicima je ponekad u asemblerunekoliko stotina linija koda.
C jezik predstavlja kompromis izmedu efikasnosti koda ivremena uloženog za implementaciju željene funkcionalnosti.
4Razlikuje se od mašinskog programiranja po tome što se stvarne vrijednosti instrukcija - hex vrijednosti,zamjenjuju simbolickim imenima.
P-I P-II P-III P-IV P-V P-VI
Generiranje koda
SOURCE FILES*.c, *.h
C PROCESSOR
COMPILER
LINKER
LOCATOR
EXECUTABLE FILES*.elf, *.hex, *.bin
KORAK 1
KORAK 2
KORAK 3
KORAK 4
KORAK 5
Odstranjanje svihpredprocesorskih (#)
direktiva, konstanti, makroa
Validacija sintakse koda,generiranje objektnog kodapodijeljenog u segmente
STRUKTURA OBJEKTNOG FILE-a
TEXT: DATA:
STACK: BSS:
Izvrsni kod i lokalnevarijable
Kod i lokalne varijable
Inicijalizirane globalne
i staticke varijable
Varijable i podaci kreirane
tokom izvrsavanja
koda i poziva funkcija
Neinicializirane globalne
i static varijable
Kreiranje relokabilnog file-a,linkanje ekternih funkcija
varijabli, biblioteka
Dodjeljivanje fizickih adresa,varijablama kao i izracun
relativnih skokova
Generiranje izvrsnih,file-ova u razlicitim
formatima
ORGANIZACIJA MEMORIJE
FLASH: 0x08000000
0x080FFFFF
RAM: 0x20000000
0x2001FFFF
PERIPHER: 0x40000000
0x5FFFFFFF
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 ukljucuje 32-bitnu višeslojnuAHB Matricu koja povezuje
osam master modula - CPU I-Bus, D-Bus and S-Bus,DMA1 i DMA2 Memory bus, DMA2 peripheral bus, Ethernet& USB bussedam slave modula - Internal memory I-Code & D-Codebus, Main and Auxiliry SRAM bus, AHB1 & AHB2peripherals, 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 aostatak 128 kB5 dostupno za DMA transakcije i periferale.
I-Code bus: CPU trasa za prikupljanje instrukcija, vektora6 izmemorijskog prostora (0x00000000 - 0x1FFFFFFF). U osnovisluži za prikupljanje instrukcija iz interne ili eksterne memorije.
D-Code bus: CPU trasa za pristup podacima i interfejsu zadebagiranje iz memorijskog prostora (0x00000000 -0x1FFFFFFF). U osnovi služi za ucitavanje literala i koddebugiranja. Pristup kodu ili podacima iz interne ili eksternememorije.
S-Bus: CPU trasa za prikupljanje instrukcija, vektora, podataka ipristup interfejsu za debagiranje iz memorijskog prostora(0x20000000 - 0xDFFFFFFF, 0xE0100000 - 0xFFFFFFFF). Uosnovi osiguran pristup CPU-a periferalima.
5Ukupno 192 kB SRAM kod STM32F407VGT6 verzije6Prikupljanje 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 povezujuAPB1, APB2 i osiguravaju sinhronu konekciju izmedu AHB idvije APB trase.
Nakon reset-a/power cycle MCU-a, svi periferalni taktovi suonemoguceni (osim SRAM i Flash interfejsa), te je stogapotrebno omoguciti generiranje takt impulsa za dati periferalkoristeci 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 prostoruvelicine 4GB.
STM32F4xx koristi little endian (Intel) princip storiranjapodataka u memoriju. Za primjer 32 bitne vrijednosti0x01020304, 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 seoznacava 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 12sektora.
Podržanje operacije nad flash memorijom su sector i masserase, shodno tome sektori su razlicite velicine.
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 omogucuju
mehanizam za zakljucavanje pristupa (citanje/pisanje)sektorima,definiranje naponskog nivoa BOR7 modula.aktivnost WDT 8
Zbog cinjenice da je period takt impulsa CPU-a znatno manji odvremena citanja podatka iz flash memorije, neophodno jepodesiti odgovarajuci broj WAIT STATES-a/LATENCY u FlashAccess Control Register FLASH_ACR u skladu sa CPU taktimpulsima HCLK i naponom napajanja MCU-a.
7Brown Out Reset predstavlja mehanizam koji štiti MCU od propada napona koji ima za posljedicu narušavanjeintegriteta memorije, integriteta izvršenja samog programa i dr. U osnovi BOR modul kada detektuje propad naponaispod predefinirane vrijednosti u vremenskom periodu ≥ 100µs uzrokuje reset MCU-a
8Modul/brojac koji po isteku resetuje MCU. Štiti izvršenje MCU softverski grešaka koje imaju za posljedicubeskonacne 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 backupdomain ResetSystem reset - setuje sve registre na reset stanje osim reset flagova u clockcontroller CSR registru i Backup domain registrima.
System reset se generira u jednom od sljedecih slucajeva: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 slucajuPower-on/power-down reset (POR/PDR reset) ili BOR resetNakon 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_BDCRregistar na reset vrijednosti.
Backup Domain Reset se generira u jednom od dva slucaja
Software resetPower cycle - VDD ili VBAT je apliciran uz pretpostavku daje napon prije dogadaja bio nula volti.
STM32F4xxx ima tri primarna izvora takt impulsa zaCPU/periferale:
HSI (High Speed Internal izvor baziran na RC oscilatoru,HSE (High Speed External) izvor baziran na eksternomoscilator (baziran na kvarcnom kristalu),Main PLL (Phase Lock Loop) - generiranje takt impulsa zaCPU, 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 taktimpulsa 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 zasebnokontrolisati s ciljem povecanja energetske efikasnosti (smanjenjaukupne struje MCU-a).
Frekvencija eksternog HSE oscilatora mora biti u opsegu od 4MHz do 26 MHz.
HSI je 16 MHz izvor takt impulsa implementiran sa RCoscilatorom koji se može koristiti kao glavni izvor takt impulsa a ikao 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 15pF, 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 konkretnogizvora.Main PLL: jitter 200 ps i max struja od 0.85 mA.HSI oscilator : tacnost ±4%, startup time 4µs i max struja od 80µA.LSI oscilator : tacnost ±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 kompletnudokumentaciju (registre i funkcionalnost) STM32F4xx serije MCU’s
sistema generiranja takta,modova rada,IO jedinice,periferala,memorijskih modula.
STM32F407 Datasheet koji definira specificnosti konkretnog cipaelektricne karateristike MCU-a,podržane periferale,raspodred pinova na cipu MCU-a,matricu mapiranje IO linija prema periferalima,radni takt CPU i velicinu memorije,
UM1473 Dokumentacija STM32F4 Discovery ploce koja ukljucujeelektricnu shemu razvojen ploce,raspored pinova na header-u ploce,informacije o eksternim komponentama.
P-I P-II P-III P-IV P-V P-VI
Toolchain
Toolchain - predstavlja skup alata i biblioteka neophodnih zakompajliranje, linkanje i generiranje izvršnog koda zamikrokontrolera kao i aplikacije za spremanje koda u flashmemoriju mikrokontrolera.
S ciljem automatizacije procesa kompajliranja koristi se makeprogram.
make predstavlja aplikaciju za automatizaciju procesa izvršenjagrupe komandi ili aplikacija.
Pozivom make programa sa komandne linije, make aplikacija cepretražiti lokalni direktoriji za file-om Makefile. U suprotnommora se navesti ime make file-a sa -f opcijom, ukoliko make fileima 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 sagcc. 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 gdjesu 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 ogranicenja/ovisnosti (dependencies) s obziromna druge file-ove.
Jednolinijske komentare možemo dodavati sa karakterom #
Varijable unutar make file-a možemo kreirati na jednostavan nacin
# 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 funkcijeint main(void)stm32f4xx.h - zaglavlja koje remapira simbolicka imenasvih periferala u stvarne fizicke adrese registaramikrokontrolera.system_stm32f4xx.c - sadrži implementacijuvoid SystemInit(void) funkciju koja ima za cilj inicijalizacijudigitalne PLL-a, tipa i izvora takt impulsa.startup_stm32f4xx.s - startup file definira tabelu vektorahandler-a ISR-astm32_flash.ld - linker skriptu koja definira adrese ivelicine internog FLASH i RAM, eksterne memorije zatimdata, text, bss ostale sekcije objektnih file-ove.Makefile - komande za automatizaciju procesakompajliranja, linkanja, generiranja izvršnog file i njegovopohranjivanje u flash memoriju.
P-I P-II P-III P-IV P-V P-VI
GPIO Port
STM32F4xx ARM Cortex M4 mikrokontrolera ukljucuje 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 6GPIO portova: GPIOA, GPIOB, GPIOC, GPIOD, GPIOE i GPIOF.
Svaki GPIOx Port ukljucuje 4 konfiguracijska 32-bitna registra
GPIOx_MODERGPIOx_OTYPERGPIOx_OSPEEDRGPIOx_PUPDR
Dva podatkovna 32-bitna registra i set/reset registar
GPIOx_IDRGPIOx_ODRGPIOx_BSRR
Lock registar i registar alternativnih funkcija oba 32-bitna registra
GPIOx_LCKRGPIOx_AFRHGPIOx_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. Funkcijekoje 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 odgovarajuceg IO pina a može biti:[0] push-pull ili [1] open drain.
9STM32 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 vrijemeodnosno 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 neopterecenog pina.Dozvoljene vrijednosti su: , pull-up, pull-down, reserved (00,01,10,11).
00 - no pull-ups/downs,01 - pull-up,10 - pull-down.
10Važ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 izlaznipin opšte namjene.
GPIOx_BSRR - pisanje bit-a u grupi od prvih 15 bita, setuje stanjeodgovarajuceg bita. Sa druge strane, pisanje u drugoj grupi od 15 bita resetujestanje 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 pinopšte namjene.
GPIOx_LCKR omogucuje zakljucavanje trenutne konfiguracije GPIO porta.
GPIOx_AFRH i GPIOx_AFRL - grupe od po 4 bita definiraju aktivnu alternativnufunkciju koje IO pin može imati.
U osnovi grupe od po cetiri bita unutar AFR registra definiraju konkretnualternativnu funkciju.
Konkretna funkcija pina zavisi od binarne kombinacije/GPIO porta/pina11
11Pogledati 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 sljedecih koraka
1. Omoguciti pristup odgovarajucem GPIOx PORT-u na AHB1 sabirnicu(bus) kao i generiranje takta za dati GPIOx sa AHB1ENR registrom izRCC (Reset and Clock Control) modula.
2. Postaviti tip IO pina u digitalni izlaz opšte namjene koristeciGPIOx_MODER registar.
3. Postaviti karakter izlaznog IO pina koristeci 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 logicku nulu umain funkciji
RCC->AHB1ENR |= (RCC_AHB1ENR_GPIODEN);//RCC->AHB1ENR |= 0x00000008;12
GPIOD->MODER |= 0x80000000;GPIOD->OTYPER = 0x00000000;GPIOD->OSPEEDR |= 0xC0000000;GPIOD->ODR &= ~(0x00008000);
12Pogledati 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 sljedecih koraka
1. Omoguciti pristup odgovarajucem GPIO port na AHB1 sabirnicu (bus) kaoi generiranje takta za dati GPIOx sa AHB1ENR registrom iz RCC (Resetand Clock Control) modula.
2. Postaviti tip IO pina u digitalni ulaz opšte namjene koristeciGPIOx_MODER registar.
3. Odabrati karakter neopterecenog IO pina koristeci GPIOx_PUPDRregistar.
4. Procitati stanje IO pina sa GPIOx_IDR.
Primjer inicijalizacije GPIOA porta i IO pina 0 kao digitalni ulaz sa pull-up-om umain funkciji
RCC->AHB1ENR |= (RCC_AHB1ENR_GPIOAEN)13
GPIOA->MODER &= ~(0x00000003);GPIOA->PUPDR = 0x00000001;uint32_t state = (GPIOA->IDR)&(0x00000001);
13Pogledati STM32F4xx reference manual str 238
P-I P-II P-III P-IV P-V P-VI
GPIO Port - elektricne 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 tipicno 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
PRIMJER 1
Na STM32F4 Disco nalaze se 4 LED diode. Napisati C program koji ce manipulirati 4 LED
diode (LD3-LD6) na nacin da se sve cetiri diode periodicno ukljucuju i iskljucuju.
Napomene:
Za tacnu informaciju na kojem IO pinu i kojem GPIO portu su spojeneLED, pogledati STM32F4 Disco manual p36.Pauze izmedu operacija ukljucivanja i iskljucivanja LED softverskigenerirati.
P-I P-II P-III P-IV P-V P-VI
GPIO Port - primjer 1 - analiza
GCC kompajler ce izbaciti svaku petlju tokom kompajliranja ukoliko ista u svomtijelu ima samo lokalnu varijablu koju inkrementiramo.
Prvo rješenje datog problema je ukidanje optimizacije.
Posljedica: velicina koda postaje znacajno veca.
Drugi nacin je da proglasimo brojacku varijablu cnt u petlji (sa kojom simuliramopauzu) kao volatile ili static.
Prefiks volatile za varijablu nagovještava kompajleru da sve dijelove koda ukojim se pojavljuje citanje/pisanje u date varijable, kompajler ne optimizira.
Nedostatak: generiranje pauza i ukljucivanje koncepta vremena u program nemože se bazirati na softverskim emulacijama pauza/vremena jer:
Vrijeme izvršavanja instrukcija varira od platforme do platforme,Kod kojim emuliramo pauzu biti ce preveden u instrukcije procesora uzavisnosti od nivoa i tipa optimizacije.Ne znamo tacno vrijeme izvršavanja jednog prolaza kroz petlju.Granulacija vremenskog koraka pauza je ogranicena i varijabilna (uzavisnosti sa opterecenjem procesora (interrupts)).
P-I P-II P-III P-IV P-V P-VI
GPIO Port - primjer 2
PRIMJER 2
Na STM32F4 Disco nalazi se plavi taster (plave push-button) koji cemo iskoristiti za
demonstraciju funkcionalnosti GPIO pin-a kada obavlja funkciju digitalni ulaz opšte namjene.
Napisati C program koji ce:
1. Ukljuciti sve LED diode na STM32F4 Disco razvojnoj ploci (LD3-LD6) dok je taster
pritisnut, a zatim iskljuciti kada je taster otpušten. Drugacije receno stanje LED diode mora
biti invertovano stanje tastera.
2. Ukljuciti sve LED diode na STM32F4 Disco razvojnoj ploci (D1-D4) kada se izvrši cijela
operacija on-off a zatim na sljedecoj on-off operaciji iskljuci sve LED diode. .
Napomene:Za tacnu 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 mehanicke i elektricne (tranzistori) prekidace prati prijelazni procesa izstanja HIGH u LOW i obratno. Dodatno, na krajevima tastera dolazi do oscilacijanapona zbog nesavršenosti dodirne površine što ima za posljedicu da tasterbude u stanju on-off par stotina puta u nekoliko milisekundi.
Oba problema možemo tretirati na nacin da koristimo softversko (debouncingrutine) ili hardversko rješenje (pull-up ili pull-down sa debouncingkondenzatorom).Najjednostavnije rješenje debouncinga je upotreba rutina za kašnjenje. Medutim,trajanje oscilacija je specificno 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 ostalihprocesa kao i analiza utjecaja stanja IO ulaznog pina.
P-I P-II P-III P-IV P-V P-VI
Literatura
LiteraturaSTM32F4xx Reference manualSTM32F4 Discovery Board User ManualSTM32F407xx DatasheetDigital Signal Processing Using the ARM Cortex M4
P-I P-II P-III P-IV P-V P-VI