lab Wprowadzenie

background image

1

Systemy Wbudowane

Systemy Wbudowane

dla kierunku

dla kierunku

MECHATRONIKA

MECHATRONIKA

dr inż. Marek Galewski

Politechnika Gdańska

Wydział Mechaniczny

Katedra Mechaniki i Mechatroniki

Laboratorium

Laboratorium

Wprowadzenie do laboratorium

Wprowadzenie do laboratorium

background image

2

Wprowadzenie

Wprowadzenie

• Zestaw uruchomieniowy ZL27ARM

• Inne niezbędne elementy sprzętowe

• Środowisko Keil uVison 4

– Pierwszy projekt

background image

3

Zestaw ZL27ARM

Zestaw ZL27ARM

• ZL27ARM

2

3

4

6

7

8

9

10

11

12,13

14

15

16

17

18

19

5

1

1. Włącznik zasilania
2. Rezonatory kwarcowe (8 MHz

i 32,768 kHz)

3. 4-przyciskowa klawiatura
4. Przycisk Reset
5. 5-pozycyjny joystick (połączony

równolegle z klawiaturą)

6. 8 diod LED
7. 5 16-bitowych portów GPIO
8. Złącze wyświetlacza

alfanumerycznego LCD 2×16
znaków

9. Podświetlenie LCD o regulowanej

jasności (PWM)

10. Termometr cyfrowy TC77

(Microchip) z interfejsem SPI

11. Interfejs CAN

background image

4

Zestaw ZL27ARM

Zestaw ZL27ARM

• ZL27ARM

2

3

4

6

7

8

9

10

11

12,13

14

15

16

17

18

19

5

1

12. Interfejs USB (device)
13. Złącze USB
14. Przetwornik piezoceramiczny –

buzzer („głośniczek”)

15. Potencjometr umożliwiający

podanie napięcia na wejście
przetwornika AC

16. Złącze JTAG
17. Złącze kart pamięci SD/MMC
18. Złącze DB9 i interfejs RS232
19. Zworki wyboru typu pamięci, z

której zostanie uruchomiony
mikrokontroler

background image

5

ZL27ARM

ZL27ARM

• Schematy elektryczne

– Patrz  dokumentacja zestawów ZL27ARM

• zl27arm.pdf

– Należy OBOWIĄZKOWO zapoznać się z nimi!

background image

6

Programator ZL30PRG

Programator ZL30PRG

• ZL30PRG

– Programator USB JTAG

• Umożliwia wgranie programu do mikrokontrolera
• Umożliwia debuggowanie i śledzenie uruchomionego programu

background image

7

Zestaw ZL27ARM

Zestaw ZL27ARM

• ZL27ARM + ZL30PRG + wyświetlacz LCD1602

background image

8

Zestaw ZL27ARM

Zestaw ZL27ARM

• Podłączenie do PC

– 2 przewody USB

• Do programatora JTAG

– Tym przewodem programujemy i debuggujemy mikrokontroler

• Do płytki

– Przewód wyłącznie zasilający

– Płytka nie komunikuje się z systemem przez USB

» Chyba, że sami napiszemy odpowiedni program dla

mikrokontrolera i sterownik dla Windows

background image

9

Procedura programowania

Procedura programowania

Edytor

Kompilator

Linker

Program w

pamięci procesora

Kod źródłowy

(pliki .c, .h, .s)

Pliki

obiektów

(pliki .o, .elf)

Obraz pamięci

mikrokontrolera

(pliki .axf, .hex)

Algorytm

Dołączane

kody binarne

np. biblioteki

Śledzenie wykonania programu i debuggowanie

Programista

Keil µVision

armcc

Real View Compiler

armlink

Real View Linker

Programator

ZL30PRG

(JTAG)

Błędy wykryte

przez kompilator

Błędy wykryte

przez linker

JTAG

background image

10

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Przygotowanie folderu i plików

– W C:\Prace\ARM\ utwórz folder dla nowego projektu.
– Z C:\ARM\Projekt_wzorcowy skopiuj do niego pliki:

• stm32f10x_conf.h
• stm32f10x_it.c
• stm32f10x_it.h
• mod_startup_stm32f10x_md.s

– Wewnątrz utworzonego folderu projektu utwórz

foldery o nazwach \Lst i \Obj.

background image

11

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Keil µVision 4

Edytor tekstowy
Kod programu i
plików pomocniczych

Komunikaty kompilatora i linkera

Pliki projektu

background image

12

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Tworzenie nowego projektu

Project > New uVision Project….

• Podaj nazwę projektu
• Wybierz procesor (STMicroelectronic > STM32F103VB)

– Na pytanie o kopiowanie plików odpowiedzieć: Nie

background image

13

Tworzenie i edycja projektu

Tworzenie i edycja projektu

– W oknie plików projektu:

• Zmień nazwę pierwszej grupy na UserCode
• Dodaj nowe grupy:

StdPeriphDrv
CMSIS

RVMDK

background image

14

Tworzenie i edycja projektu

Tworzenie i edycja projektu

– Tworzenie nowego pliku

File>New
• W otwartym, nowym pliku wpisz:

#include "stm32f10x.h"

int main(void)

{

return 0;

}

• Zapisz plik w folderze Twojego projektu pod nazwą main.c.
• Kliknij prawym klawiszem myszy w oknie Project na grupie

UserCode i wybierz Add Files to Group ‘UserCode’

– Wybierz plik main.c i kliknij Add, a następnie Close.

background image

15

Tworzenie i edycja projektu

Tworzenie i edycja projektu

– Dodawanie pozostałych plików do projektu:

• Do grupy UserCode dodaj pliki:

– stm32f10x_conf.h
– stm32f10x_it.c
– stm32f10x_it.h

• Do grupy RVMDK dodaj plik:

– mod_startup_stm32f10x_md.s

• Do grupy CMSIS dodaj pliki:

– C:\ARM\STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\CMSIS\CM3\

CoreSupport\ core_m3.c

– C:\ARM\STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\CMSIS\CM3\

DeviceSupport\ ST\STM32F10x\system_stm32f10x.c

• Do grupy StdPeriphDrv dodaj pliki z folderu :

C:\ARM\STM32F10x_StdPeriph_Lib_V3.3.0\

Libraries\STM32F10x_StdPeriph_Driver\src\

– stm32f10x_rcc.c
– stm32f10x_flash.c
– misc.c
– stm32f10x_gpio.c

background image

16

Tworzenie i edycja projektu

Tworzenie i edycja projektu

– Opcje projektu:

• Kliknąć prawym klawiszem myszy na najwyższym elemencie

struktury plików (Target 1) i wybrać Options for Target

• Zakładka Device

– Bez zmian (typ procesora)

• Zakładka Target

– Włączyć opcję Use MicroLIB

background image

17

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Zakładka Output

– Wybrać przycisk Select Folder for Objects i wskazać folder

\Obj.

– Zaznaczyć pole Create HEX File oraz Browse Information

• Zakładka Listing

– Wybrać przycisk Select Folder for Listings i wskazać folder \Lst.

background image

18

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Zakładka C/C++

– W polu Define wpisać:

USE_STDPERIPH_DRIVER, STM32F10X_MD

– W polu Optimization na razie zostawić 0.

– Poniżej listy wyboru poziomu optymalizacji wybrać opcję One ELF

Section per Function.

– W polu Include Paths dodać foldery:

» .

- Folder bieżący projektu

» C:\ARM\STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\CMSIS\

CM3\CoreSupport;

» C:\ARM\STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\CMSIS\

CM3\ DeviceSupport\ST\STM32F10x;

» C:\ARM\STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\

STM32F10x_StdPeriph_Driver\inc

background image

19

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Zakładka C/C++

background image

20

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Zakładka Asm

– Opcje baz zmian

• Zakładka Linker

– Włączyć Use Memory Layout from Target Dialog

• Zakładka Debug

– Ustawić Use Simulator, zaznaczyć Limit Speed to Real-Time

– wybierać ST-Link Debugger, a w Settings protokół JTAG.

background image

21

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Kod programu

#include "stm32f10x.h"

void RCC_Config(void);
void GPIO_Config(void);
void NVIC_Config(void);

int main(void)
{

//konfiguracja systemu

RCC_Config();
GPIO_Config();
NVIC_Config();

/*Tu umiescic ewentualne dalsze funkcje konfigurujace system*/

while (1) {

/*Tu umiescic glowny kod programu*/

};
return 0;

}

background image

22

Tworzenie i edycja projektu

Tworzenie i edycja projektu

void RCC_Config(void)

//konfigurowanie sygnalow taktujacych

{

ErrorStatus HSEStartUpStatus;

//rezultat uruchomienia HSE

RCC_DeInit();

//Reset ustawien RCC

RCC_HSEConfig(RCC_HSE_ON);

//Wlaczenie HSE

HSEStartUpStatus = RCC_WaitForHSEStartUp();

//Czekaj na HSE

if(HSEStartUpStatus == SUCCESS)
{

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);

//zwloka pamieci Flash;

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//ustaw HCLK=SYSCLK

RCC_PCLK2Config(RCC_HCLK_Div1);

//ustaw PCLK2=HCLK

RCC_PCLK1Config(RCC_HCLK_Div2);

//ustaw PCLK1=HCLK/2

//ustaw PLLCLK = HSE*9 czyli 8MHz * 9 = 72 MHz

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);

//wlacz PLL

//odczekaj na poprawne uruchomienie PLL

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//SYSCLK=PLL

while(RCC_GetSYSCLKSource() != 0x08);

//Czekaj na ust. SYSCLK

//wlacz taktowanie GPIO B

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

}

}

background image

23

Tworzenie i edycja projektu

Tworzenie i edycja projektu

void GPIO_Config(void)

//konfigurowanie portow GPIO

{

GPIO_InitTypeDef GPIO_InitStructure;

//konfiguracja portu GPIO B

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |

GPIO_Pin_10 | GPIO_Pin_11 |
GPIO_Pin_12 | GPIO_Pin_13 |
GPIO_Pin_14 | GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

}

background image

24

Tworzenie i edycja projektu

Tworzenie i edycja projektu

void NVIC_Config(void)

//Konfigurowanie kontrolera przerwan NVIC

{
#ifdef VECT_TAB_RAM

//Jezeli tablica wektorow w RAM, ustaw jej adres na 0x20000000

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else

// VECT_TAB_FLASH

// W przeciwnym wypadku ustaw na 0x08000000

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif
}

background image

25

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Uwagi:

– W dalszych ćwiczeniach będzie można korzystać z tego

szkieletu kopiując do swojego folderu zawartość folderu
C:\ARM\Projekt_wzorcowy.

– W przypadku rozpoczynania nowego zadania od

projektu wzorcowego konieczna będzie aktualizacja
nazwy w polu Name of Executable w zakładce Output.

background image

26

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Pomoc w pisaniu programu:

– Opis funkcji z bibliotek STM32F10x

• C:\ARM\stm32f10x_stdperiph_lib_um.chm

– Zakładka Functions

background image

27

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Rozbudowa kod programu

- funkcja main()

int main(void) {

volatile unsigned long int i;

//konfiguracja systemu

RCC_Config();
NVIC_Config();
GPIO_Config();

/*Tu umiescic ewentualne dalsze funkcje konfigurujace system*/

GPIO_ResetBits(GPIOB, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |

GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |
GPIO_Pin_14 | GPIO_Pin_15);

while (1) {

/*Tu umiescic glowny kod programu*/

GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_SET);
for(i = 0; i < 0x450000ul; i++);

//okolo 0.5s przy 72MHz

GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_RESET);
GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_SET);
for(i = 0; i < 0x450000ul; i++);
GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_RESET);

};
return 0;

}

background image

28

Tworzenie i edycja projektu

Tworzenie i edycja projektu

• Kompilowanie i linkowanie projektu:

Project > Rebuild All Target Files lub Project > Build

(klawisz F7)

– Jeśli kompilacja i linkowanie powiodą się, generowany

jest plik HEX, np.:

Program Size: Code=1132 RO-data=252 RW-data=0 ZI-data=1024

FromELF: creating hex file...

"Cw1.axf" - 0 Error(s), 0 Warning(s).

background image

29

Symulowanie i śledzenie programu

Symulowanie i śledzenie programu

• Tryb debuggera

– ikona

background image

30

Symulowanie i śledzenie programu

Symulowanie i śledzenie programu

– Zakładka Register

• Podgląd zawartość rejestrów procesora R0-R15 i xPSR

– Okno Disassembly

• Kod asemblera

– Okno Symbols

• Lista dostępnych w programie symboli.
• Grupa Peripheral Register

– Adresy rejestrów wszystkich urządzeń peryferyjnych procesora

• Grupa o nazwie takiej jak projekt

– Adresy funkcji i zmiennych użytych w programie

– Zakładka Locals

• Podgląd zmiennych lokalnych aktualnie wykonywanej funkcji

Zakładka Watch

• Podgląd określonych zmienne

– Zakładka Memory

• Podgląd wskazanego obszaru pamięci

background image

31

Symulowanie i śledzenie programu

Symulowanie i śledzenie programu

System Viewer

View > System Viewer > rodzaj grupy rejestrów
• Okienko, w którym można obejrzeć zawartość rejestrów z

wybranej grupy.

– Np. wszystkie rejestry związane z portem GPIOB.

– Symulator

Peripherals
• Pozwala w bardziej przystępny sposób zobaczyć najważniejsze

rejestry dotyczące danego podukładu procesora oraz zmieniać
ich stan

background image

32

Symulowanie i śledzenie programu

Symulowanie i śledzenie programu

debuggowanie

– Ustawianie breakpoint
– Reset
– Uruchomienie

– Praca krokowa

0x40010C00

Peripherals > General Purpose I/O > GPIOB

background image

33

Programowanie pamięci MCU

Programowanie pamięci MCU

ZL30PRG

– C:\ARM\ZL30PRoGrammer\zl30prg.exe
1. Identify device - sprawdza typ procesora znajdującego

się na płytce

2. Wybrać plik obrazu pamięci w formacie .hex

Znajduje się w podfolderze \Obj folderu projektu

3. Write Flash – zapisanie obrazu do pamięci MCU

background image

34

Symulowanie i śledzenie programu

Symulowanie i śledzenie programu

• Śledzenie programu w procesorze

– W opcjach projektu w zakładce Debug zmienić pozycję

Use Simulator na Use ST-Link debugger

– Przejść do trybu debuggera
– Śledzenie działa tak samo jak w symulatorze

• Widoczne są rzeczywiste wartości ustawione w danej chwili

w procesorze (a nie symulowane)!


Wyszukiwarka

Podobne podstrony:
Lab.1, Wprowadzenie
lab 1 wprowadzenie R
lab 1, wprowadzenie R
Lab Wprowadzenie
LAB 4 Lab2 WprowadzenieMATLAB 2 Nieznany
WDA LAB 3, WAT, semestr III, Wprowadzenie do automatyki
Lab 01 Wprowadzenie do systemu UNIX
Linux asm lab 07 (Wprowadzenie do Linux'a i Asemblera )
(Ćw nr 3,4) PA Lab UKLADY PRZELACZAJACE WPROWADZENIE
PrzekrĂłj, ZSI, wprowadzenie do ćwiczeń lab
Lab 01 Wprowadzenie do systemu UNIX
Wprowadzenie i ogólne podstawy teoretyczne, Semestr 3 moje, FIZYKA LAB, fizyka cw 1
Lab 01 Wprowadzenie do systemu UNIX
Lab 05 Proces i watki wprowadzenie
lab 1 01 wprowadzenie do mathcada 1 3
Lab 05 Wprowadzenie do jezyka C
lab u z inst wprowadz

więcej podobnych podstron