lab Wprowadzenie


Systemy Wbudowane
Systemy Wbudowane
dla kierunku
dla kierunku
MECHATRONIKA
MECHATRONIKA
Laboratorium
Laboratorium
Wprowadzenie do laboratorium
Wprowadzenie do laboratorium
dr inż. Marek Galewski
Politechnika Gdańska
Wydział Mechaniczny
Katedra Mechaniki i Mechatroniki
1
Wprowadzenie
Wprowadzenie
" Zestaw uruchomieniowy ZL27ARM
" Inne niezbędne elementy sprzętowe
" Środowisko Keil uVison 4
 Pierwszy projekt
2
Zestaw ZL27ARM
Zestaw ZL27ARM
" ZL27ARM
18 11 12,13
1. Włącznik zasilania 1
2. Rezonatory kwarcowe (8 MHz
i 32,768 kHz)
3. 4-przyciskowa klawiatura 10
4. Przycisk Reset
16
5. 5-pozycyjny joystick (połączony
9
równolegle z klawiaturą)
8
6. 8 diod LED
14
7. 5 16-bitowych portów GPIO
15
8. Złącze wyświetlacza
alfanumerycznego LCD 216
2
7
znaków
9. Podświetlenie LCD o regulowanej 17
jasności (PWM)
10. Termometr cyfrowy TC77
19
(Microchip) z interfejsem SPI
11. Interfejs CAN
6 3 4 5
3
Zestaw ZL27ARM
Zestaw ZL27ARM
" ZL27ARM
18 11 12,13
12. Interfejs USB (device) 1
13. Złącze USB
14. Przetwornik piezoceramiczny 
buzzer ( głośniczek ) 10
15. Potencjometr umożliwiający
16
podanie napięcia na wejście
9
przetwornika AC
8
16. Złącze JTAG
14
17. Złącze kart pamięci SD/MMC
15
18. Złącze DB9 i interfejs RS232
19. Zworki wyboru typu pamięci, z
2
7
której zostanie uruchomiony
mikrokontroler 17
19
6 3 4 5
4
ZL27ARM
ZL27ARM
" Schematy elektryczne
 Patrz dokumentacja zestawów ZL27ARM
" zl27arm.pdf
 Należy OBOWIZKOWO zapoznać się z nimi!
5
Programator ZL30PRG
Programator ZL30PRG
" ZL30PRG
 Programator USB JTAG
" Umożliwia wgranie programu do mikrokontrolera
" Umożliwia debuggowanie i śledzenie uruchomionego programu
6
Zestaw ZL27ARM
Zestaw ZL27ARM
" ZL27ARM + ZL30PRG + wyświetlacz LCD1602
7
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
8
Procedura programowania
Procedura programowania
Programista
Dołączane
Algorytm
kody binarne
np. biblioteki
Edytor Kompilator Linker Programator
armcc armlink
Keil Vision
Obraz pamięci ZL30PRG
Kod zródłowy Pliki
Real View Compiler Real View Linker
mikrokontrolera (JTAG)
(pliki .c, .h, .s) obiektów
(pliki .axf, .hex)
(pliki .o, .elf)
Błędy wykryte
Błędy wykryte
przez kompilator
przez linker
Program w
JTAG
pamięci procesora
Śledzenie wykonania programu i debuggowanie
9
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.
10
Tworzenie i edycja projektu
Tworzenie i edycja projektu
" Keil Vision 4
Pliki projektu
Edytor tekstowy
Kod programu i
plików pomocniczych
Komunikaty kompilatora i linkera
11
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
12
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
13
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.
14
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
15
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
16
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.
17
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
18
Tworzenie i edycja projektu
Tworzenie i edycja projektu
" Zakładka C/C++
19
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.
20
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;
}
21
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);
}
}
22
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);
}
23
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
}
24
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.
25
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
26
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;
}
27
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).
28
Symulowanie i śledzenie programu
Symulowanie i śledzenie programu
" Tryb debuggera
 ikona
29
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
30
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
31
Symulowanie i śledzenie programu
Symulowanie i śledzenie programu
" debuggowanie
 Ustawianie breakpoint
 Reset
Peripherals > General Purpose I/O > GPIOB
 Uruchomienie
 Praca krokowa
0x40010C00
32
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
33
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)!
34


Wyszukiwarka

Podobne podstrony:
Lab Wprowadzenie do jezyka C
Lab Wprowadzenie do systemu UNIX
Lab Wprowadzenie do jezyka C
Lab Wprowadzenie
Lab Wprowadzenie do systemu UNIX
lab 1 01 wprowadzenie do mathcada 1 3
Linux asm lab 07 (Wprowadzenie do Linux a i Asemblera )
Lab 05 Proces i watki wprowadzenie
(Ćw nr 3,4) PA Lab UKLADY PRZELACZAJACE WPROWADZENIE
WYKŁAD 1 Wprowadzenie do biotechnologii farmaceutycznej
wprowadz w11
Lab cpp
lab 2
T2 Skrypt do lab OU Rozdział 6 Wiercenie 3
Medycyna manualna Wprowadzenie do teorii, rozpoznawanie i leczenie
IE RS lab 9 overview

więcej podobnych podstron