Sunteți pe pagina 1din 8

LABORATOR 1 –Instalarea mediului si scrierea directa in memorie

Pentru realizarea obiectivului acestui laborator, vom parcurge urmatorii pasi:


1. Instalarea si lansarea mediului de dezvoltare IAR pentru microcontrolere ARM
2. Setarea IAR pentru microcontrolerul ales si crearea unui program vid pentru
vizualizarea spatiului de memorie si registre
3. Actionarea directa asupra registrelor din spatiul de memorie pentru comanda
terminalelor cuplate la LED-uri.

Prezentarea unui microcontroler ARM tipic si a unei plăci de dezvoltare pentru


acesta

In continuare se va folosi placa de dezvoltare STM32F4-Discovery echipata cu


microcontrolerul STM32F407VG din familia de microcontrolere ARM Cortex-m4 de tip
STM32F405xx/07xx, STM32F415xx/17xx, STM32F42xxx, STM32F43xxx.

Prezentam in continuare sintetic cateva dintre principalele caracteristici ale placii si ale
microcontrolerului care o echipeaza.
Features
• STM32F407VGT6 microcontroller featuring 1 MB of Flash memory, 192 KB of RAM in an LQFP100
package
• On-board ST-LINK/V2 with selection mode switch to use the kit as a standalone ST-LINK/V2 (with SWD
connector for programming and debugging)
• Board power supply: through USB bus or from an external 5V supply voltage
• External application power supply: 3V and 5V
• LIS302DL or LIS3DSH, ST MEMS motion sensor, 3-axis digital output accelerometer
• MP45DT02, ST MEMS audio sensor, omnidirectional digital microphone
• CS43L22, audio DAC with integrated class D speaker driver
• Eight LEDs: – LD1 (red/green) for USB communication – LD2 (red) for 3.3V power on – Four user LEDs,
LD3 (orange), LD4 (green), LD5 (red) and LD6 (blue) – 2 USB OTG LEDs LD7 (green) VBus and LD8 (red)
over-current
• Two pushbuttons (user and reset)
• USB OTG with micro-AB connector
• Extension header for LQFP100 I/Os for quick connection to prototyping board and easy probing
LEDs
• LD1 COM: LD1 default status is red. LD1 turns to green to indicate that communications are in progress
between the PC and the ST-LINK/V2.
• LD2 PWR: red LED indicates that the board is powered.
• User LD3: orange LED is a user LED connected to the I/O PD13 of the STM32F407VGT6.
• User LD4: green LED is a user LED connected to the I/O PD12 of the STM32F407VGT6.
• User LD5: red LED is a user LED connected to the I/O PD14 of the STM32F407VGT6.
• User LD6: blue LED is a user LED connected to the I/O PD15 of the STM32F407VGT6.
• USB LD7: green LED indicates when VBUS is present on CN5 and is connected to PA9 of the
STM32F407VGT6.
• USB LD8: red LED indicates an overcurrent from VBUS of CN5 and is connected to the I/O PD5 of the
STM32F407VGT6.

Pushbuttons
• B1 USER: User and Wake-Up button connected to the I/O PA0 of the STM32F407VGT6.
• B2 RESET: Pushbutton connected to NRST is used to RESET the STM32F407VGT6.

STM32F407VGT6 microcontroller
 ARM Cortex-M4 32-bit MCU with FPU
 USB OTG HS/FS, Ethernet, 17 TIMs, 3 ADCs, 15 comm. interfaces.
 168 MHz/210 DMIPS Cortex-M4 with single cycle DSP MAC and floating point unit providing: Boosted
execution of control algorithms
 ART Accelerator, 32-bit, 7- layer AHB bus matrix with 7 masters and 8 slaves including 2 blocks of
SRAM, Multi DMA controllers: 2 general purpose, 1 for USB HS, 1 for Ethernet, One SRAM block dedicated
to the core, providing performance equivalent to 0-wait execution from Flash Concurrent execution and
data transfers and simplified resource allocation
 Ultra-low dynamic power, RTC <1 μA typical in VBAT mode, 3.6 V down to 1.7 V VDD,
 Voltage regulator with power scaling capability when running at low voltage or on a rechargeable
battery
 Up to 1 Mbyte of on-chip Flash memory, 192 Kbytes of SRAM, reset circuit, internal RCs, PLL.
 Extensive tools and software solutions providing a wide choice within the STM32 ecosystem to
develop your applications.

1. Instalarea si lansarea mediului de dezvoltare IAR pentru microcontrolere ARM

Pentru utilizarea placii de dezvoltare sunt neceasare urmatoarele fisiere:


a. Programul IAR Embedded Workbench IDE care se descarca de pe site
http://supp.iar.com/Download/SW/?item=EWARM-EVAL
b. Driver-ul stsw-link009 pentru windows 7/8 pe 32/64 biti, care poate fi descarcat de la
adresa:
http://www.st.com/web/en/catalog/tools/PF260219
c. Sistemul de fisiere de firmware si dezvoltare, denumit STSW-STM32068 si care
contine directoarea STM32F4-Discovery_FW_V1.1.0 (care trebuie dezarhivata de
preferinta in discul C:\) si poate fi gasit la adresa:
http://www.st.com/web/en/catalog/tools/PF257904#
d. Manualul DM00039084.pdf al placii STM32F4-Discovery, care poate fi descarcat de
la:
http://www.st.com/st-web-ui/static/active/cn/resource/technical/document/user_manual/
DM00039084.pdf
e. Manualul de referinta DM00031020.pdf pentru microcontrolerele STM32F4xx care
se poate descarca de la adresa
http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf
Mai intai se instaleaza programul IAR Embedded Workbench IDE, alegandu-se
varianta gratuita cu limita de memorie de 32 KB, (care nu are alte restrictii), iar in acest
proces, cand se solicita, se instaleaza si driverele. In cazul in care acestea nu sunt instalate
corect, se ruleaza programul pentru drivere, si se verifica starea acestora.
Este util ca inca de acum sa se dezarhiveze STSW-STM32068 creind directoarea C:\
STM32F4-Discovery_FW_V1.1.0, precum si o directoare de lucru D:\STM32F4 in care sa se
pregateasca documentatia placii si a microcontrolerului.

2. Setarea IAR pentru microcontrolerul ales si crearea unui program vid pentru
vizualizarea spatiului de memorie si registre

Pentru aceasta se parcurg mai multi pasi, dupa cum urmeaza.


a. Se lanseaza IAR
b. Se da Project->Create new project
c. Se alege C->main.
d. Se alege directoarea de lucru si un nume pentru proiect
e. Se da Project->Options
f. In General se alege tipul de procesor (ST->STM32F407->STM32F407VG)
g. In Debugger se selecteaza in Setup->Driver-> ST-Link si la Download Verify+Use
Flash loader
h. Tot in Debugger, la ST-LINK selecteaza SWD.
i. Se da compilare (F7)
j. Se stabileste un nume pentru fisierul obiect
k. Pentru incarcarea programului in memoria microcontrolerului se da
Project->Download and Debug (CTRL+D) sau se da click pe penultinul buton din
bara de sus.

3. Actionarea directa asupra registrelor din spatiul de memorie pentru comanda


terminalelor cuplate la LED-uri.

Dupa incarcarea programului in memoria flash, apare in partea dreapta o fereastra de


Debug in care este afisat programul rezultat in assembler. Un click pe bara acestei ferestre o
face activa, astfel incat se pot rula pas cu pas instructiunile in limbaj de asamblare.

Se da View->Memory astfel ca apare o ferestra suplimentara de memorie, care se poate


trage de bara verticala din stanga, peste cea de mesaje, ca in figura:
Se observa in fereastra de jos o portiune din spatiul de memorie: in prima coloana din
stanga se afla adresele, iar in continuare, in grupuri de 1 pana la 4 octeti, continutul locatiilor
respective in hexazecimal si apoi echivalentul lor in ASCII.
Conform celor prezentate la punctul 1, pentru comanda unei iesiri a unui port, trebuie
indeplinite doua conditii:
a) Generarea semnalului de clock catre portul respective
b) Stabilirea directiei de iesire pentru pinul respective
In cazul placii vizate, in documentatia “STM32F407 Discovery Schematics.pdf”, se arata
(pagina 16) ca LED-urile user se afla pe pinii PD12, PD13, PD14 si PD15 (care fac parte din
portul GPIOD), iar butonul user se afla pe PA0 al portului GPIOA.
Din schema bloc a microcontrolerului (pagina 12) rezulta ca aceste porturi sunt cuplate la
bus-ul AHB1. Prin urmare, ar fi necesar sa se genereze clock pentru aceste porturi prin
registrele care controleaza clock-ul acestui bus.

In continuare se cauta in documentatia microcontrolerului “stm32f407vg ref manual.pdf”


registrele implicate. Astfel, in capitolul “Reset and clock control…” se gaseste la Registers
->”RCC AHB1 peripheral clock enable register” ca trebuie setat in 1 bitul 3 pentru a genera
clock pentru GPIOD (paginile 238-239).

Sa mai retinem ca adresa de offset a acestui registru este 0x30 (randul al doilea), si sa
cautam adresa absoluta a sa in spatiul de memorie. Pentru aceasta sa mergem la “2.3 Memory
map” iar la pagina 65 gasim ca adresa de baza a RCC este 0x4002.3800. Tot aici vedem ca
adresa de baza a GPIOD este 0x4002.0C00.

Primul lucru pe care trebuie sa-l executam este sa scriem un octet cu bitul 3 in 1 logic
(deci 0b00001000 adica 0x08) la adresa 0x4002.3800+0x30, deci la 0x4002.3830. Pentru
aceasta, in fereastra de memorie a programului IAR , la Go to se introduce 0x40023830 si se
da Enter, iar la adresa aceasta se scrie 08. Aceasta deblocheaza ceasul catre GPIOD.

Pentru stabilirea unui pin ca iesire se cauta in registrele asociate GPIO pe cel care
comanda modul de lucru al pinilor. La capitolul “8. General-purpose I/Os”-> “8.4.1 GPIO
port mode register” la pagina 278 se observa ca adresa de offset este 0x00 iar fiecare pin are
asociati 2 biti din cei 32 ai registrului (care ocupa deci 4 octeti in spatial de memorie). Cei 4
pini cuplati la LED-uri (PD12, PD13, PD14 si PD15) au alocati bitii 24-31, deci cel cu adresa
cea mai mare din cei 4 alocati acestui registru, adica 0x4002.0C00+0x00+0x03=
0x4002.0C03. Din descrierea bitilor rezulta ca pentru a seta modul iesire pe un pin, in
pozitiile respective trebuie scrisa combinatia 01. De exemplu pentru a seta pinul15
(corespunzator LED-ului albastru) ca iesire, trebuie ca la adresa 0x4002.0C03 trebuie scris
0b01000000=0x40. Aceasta este echivalent cu a scrie incapand de la adresa 0x4002.0C00
cuvantul format din 4 octeti 0x4000.0000.

Se introduce adresa 0x4002.0C03 la Memory->Go to si acolo se scrie 40, ceea ce seteaza


pinul PD15 ca iesire.

In fine, acum se poate scrie in registrul de date al GPIOD, care este descris la 8.4.6
(pagina 281) din documentatia microcontrolerului. Se observa ca trebuie scris un 1 logic in
pozitia 15 a registrului respectiv, adica 0b1000.0000.0000.0000=0x8000 la adresa
0x40020C00+0x14=0x40020C14. Ca sa scriem un cuvant de 16 biti se selecteaza din drop-
down-ul de langa fereastra Memory modul 2x Units si in fereastra Go to se scrie
0x40020C14. Scriind acum 8000, LED-ul albastru se va aprinde.

Daca dorim sa putem aprinde oricare dintre cele 4 LED-uri, ar trebui sa scriem in
registrul de mod cate un 01 in fiecare dintre pozitiile corespunzatoare pinilor respectivi, adica
0b0101.0101=0x55 la adresa 0x4002.0C03. Dupa aceea se poate aprinde LED-ul de pe PD14
scriind la adresa 0x40020C014 cuvantul 0b0100.0000.0000.0000=0x4000, cel de pe PD13 cu
0b0010.0000.0000.0000=0x2000 si cel de pe PD12 scriind 0b0001.0000.0000.0000=0x1000.

S-ar putea să vă placă și