uruchomieniowego i biblioteki API dla mikrokontrolerów STM32

Podobne dokumenty
prostych wyświetlaczy

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

LITEcomp. Zestaw uruchomieniowy z mikrokontrolerem ST7FLITE19

STM32 Butterfly. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

BF30 OCDLINK/USBASP ARM-JTAG/AVR-ISP Programmer-debugger Instrukcja obsługi

ZL30ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

ZL25ARM. Płyta bazowa dla modułów diparm z mikrokontrolerami STR912. [rdzeń ARM966E-S]

1.2. Architektura rdzenia ARM Cortex-M3...16

Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i wbudowanym programatorem ISP

ZL28ARM. Zestaw uruchomieniowy dla mikrokontrolerów AT91SAM7XC

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

ZL27ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

LITEcompLPC1114. Zestaw ewaluacyjny z mikrokontrolerem LPC1114 (Cortex-M0) Sponsorzy:

dokument DOK wersja 1.0

ZL29ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

MARM. Laboratorium 1 system zegarów, porty wejścia/wyjścia. M. Suchenek

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

BF20 JTAG dla ARM ów z interfejsem USB Instrukcja obsługi

Porty GPIO w mikrokontrolerach STM32F3

ZL2ARM easyarm zestaw uruchomieniowy dla mikrokontrolerów LPC2104/5/6 (rdzeń ARM7TDMI-S)

SYSTEMY CZASU RZECZYWISTEGO (SCR)

WYDZIAŁ ELEKTRYCZNY KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 0

2. Architektura mikrokontrolerów PIC16F8x... 13

Kurs programowania mikrokontrolerów ARM z rodziny Cortex-M3

ZL2ARM easyarm zestaw uruchomieniowy dla mikrokontrolerów LPC2104/5/6 (rdzeń ARM7TDMI-S)

Laboratorium Procesorów Sygnałowych

Programowanie mikrokontrolerów 2.0

Tab. 1. Zestawienie najważniejszych parametrów wybranych mikrokontrolerów z rodziny LPC2100, które można zastosować w zestawie ZL3ARM.

LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program

Szkolenia specjalistyczne

MOD STM32 explorem0 z STM32F051C8T6. sklep.modulowo.pl akademia.modulowo.pl zestawy.modulowo.pl app.modulowo.pl blog.modulowo.

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Projektowanie z użyciem procesora programowego Nios II

TECHNIKA MIKROPROCESOROWA II

ZL9AVR. Płyta bazowa dla modułów ZL7AVR (ATmega128) i ZL1ETH (RTL8019)

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH. PROCESORY OSADZONE kod kursu: ETD 7211 SEMESTR ZIMOWY 2017

Instrukcja obsługi. PROGRAMATOR dualavr. redflu Tarnów

Programowanie mikrokontrolerów AVR

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

ZL5PIC. Zestaw uruchomieniowy dla mikrokontrolerów PIC16F887

Politechnika Białostocka

ZL1MSP430 Zestaw startowy dla mikrokontrolerów MSP430F11xx/11xxA ZL1MSP430

ZL9ARM płytka bazowa dla modułów diparm z mikrokontrolerami LPC213x/214x

WYDZIAŁ ELEKTRYCZNY KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 1

ZL8AVR. Płyta bazowa dla modułów dipavr

Electronic Infosystems

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

ZL11ARM. Uniwersalna płytka bazowa dla modułów diparm

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

Instrukcja programowania płytek edycji 2014

ZL10PLD. Moduł dippld z układem XC3S200

MultiTool instrukcja użytkownika 2010 SFAR

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

Programator procesorów rodziny AVR AVR-T910

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

ZL5ARM. Zestaw uruchomieniowy dla mikrokontrolerów LPC2119/2129 (rdzeń ARM7TMDI-S) Kompatybilność z zestawem MCB2100 firmy Keil

ZL6ARM Zestaw uruchomieniowy dla mikrokontrolerów LPC213x. Tab. 1. Zestawienie najważniejszych parametrów wybranych mikrokontrolerów z rodziny LPC213x

Konfigurowanie modułu BK9050 firmy Beckhoff wprowadzenie

WYDZIAŁ ELEKTRYCZNY KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 2

SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701. SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701.

Instytut Teleinformatyki

ZL16AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega8/48/88/168

KAmduino UNO. Płytka rozwojowa z mikrokontrolerem ATmega328P, kompatybilna z Arduino UNO

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Konfiguracja pakietu CrossStudio for MSP

Instrukcja dla: Icomsat v1.0 SIM900 GSM/GPRS shield for Arduino oraz dla GPRS Shield produkcji Seeedstudio.

KAmduino UNO. Rev Źródło:

WYDZIAŁ ELEKTRYCZNY KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 4

1.1 Co to jest USBasp? Parametry techniczne Obsługiwane procesory Zawartość zestawu... 4

Programowanie procesora Microblaze w środowisku SDK

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

3. Sygnały zegarowe i ich konfiguracja, mechanizmy bezpieczeństwa... 47

ADuCino 360. Zestaw uruchomieniowy dla mikrokontrolerów ADuCM360/361

1.Wstęp. 2.Generowanie systemu w EDK

Instytut Teleinformatyki

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów AVR

Programator ICP mikrokontrolerów rodziny ST7. Full MFPST7. Lite. Instrukcja użytkownika 03/09

ZL4PIC uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC (v.1.0) Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

ISBN Copyright by Wydawnictwo BTC Legionowo 2008

Parametryzacja przetworników analogowocyfrowych

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Spis treści. Wykaz ważniejszych skrótów Wprowadzenie Rdzeń Cortex-M Rodzina mikrokontrolerów XMC

ZL19PRG. Programator USB dla układów PLD firmy Altera

ZL2AVR. Zestaw uruchomieniowy z mikrokontrolerem ATmega8

Instrukcja obsługi programatora AVR Prog USB v2

MOD Xmega explore z ATXmega256A3BU. sklep.modulowo.pl akademia.modulowo.pl zestawy.modulowo.pl app.modulowo.pl blog.modulowo.

WYDZIAŁ ELEKTRYCZNY KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 5

USB interface in 8-bit microcontrollers PIC18F family manufactured by Microchip.

Uniwersalny zestaw uruchomieniowy ZL4PIC

MIKROKONTROLERY I MIKROPROCESORY

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

Zestaw Startowy EvB. Więcej informacji na stronie:

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Instrukcja obsługi programatora AVR Prog USB v2

Aparatura Elektroniczna (EAE) Stopień studiów i forma: I stopień, stacjonarna Rodzaj przedmiotu: obowiązkowy - 2

Elektronika samochodowa (Kod: TS1C )

Płytka uruchomieniowa XM64

Transkrypt:

Temat 1: Wprowadzenie do środowiska IDE, prezentacja zestawu uruchomieniowego i biblioteki API dla mikrokontrolerów STM32 Celem ćwiczenia jest prezentacja podstawowych funkcji darmowego środowiska programistycznego przygotowanego dla mikrokontrolerów ARM serii STM32 z rdzeniem Cortex-M3 oraz bibliotek obsługi rdzenia i urządzeń peryferyjnych mikrokontrolera. Opanowanie zagadnień opisanych w niniejszej instrukcji jest niezbędne do wykonania kolejnych ćwiczeń laboratorium Programowania mikrokontrolerów ARM serii STM32. 1. Struktura mikrokontrolerów serii STM32 Mikrokontrolery serii STM32 to 32-u bitowe układy zawierające rdzenie zgodne z architekturą ARM. Na zajęciach laboratoryjnych jest wykorzystywany układ STM32F103RBT6 z rodziny układów STM32F1xx zawierających rdzenie typu Cortex-M3. Z uwagi na różnorodne wyposażenie dodatkowe, producent (firma STMicroelectronics ) definiuje klasy tych układów, których identyfikatory zostały posortowane w Tab.1 od oznaczającego najmniej złożoną wersję (Low-density VL, [1, 2] ) do zawierającego rozbudowane peryferia (Connectivity Line). Dzięki szerokiej gamie produktów, inżynier-projektant może wybrać układ dogodny w danej aplikacji bez konieczności korzystania z najdroższej wersji układu. Tab.1. Klasy układów rodziny STM32F1xx Klasa układu Low-density Value Line, LD-VL Low density, LD Medium-density Value Line, MD-VL Medium-density, MD High-density Value Line, HD-VL High density, HD XL-density devices, XLD Connectivity Line, CL Poziom rozbudowania struktury Szczegółowy opis wybranego układu można znaleźć na stronie producenta [1]. Ogólna architektura układów STM32F1xx klas: low-, medium-, high- and XL-density jest przedstawiona na Rys.1 [3]. Rys.1 Ogólna architektura mikrokontrolerów STM32F1xx [3]

W układach tych można wyróżnić następujące bloki: rdzeń Cortex-M3, kontrolerów bezpośredniego dostępu do pamięci (Direct Memory Access, DMA), kontrolera pamięci typu Flash (Flash memory interface, FLITF) kontrolera pamięci typu SRAM (Flexible Static Memory Controler, FSMC) pamięci typu Flash i SRAM, kontrolera czytnika kart SD (Secure Digital Input/Output Interface, SDIO) jednostki nadzorującej sygnały taktującei sygnał zerowania (Reset and Clock Control, RCC), urządzeń peryferyjnych komunikujących się przez magistrale APB (Advanced Peripheral Bus). Należy podkreślić, że wszystkie układy peryferyjne oraz magistrale wymagają sygnałów taktujących. Dlatego muszą one zostać odpowiednio skonfigurowane przed uruchomieniem. Oczywiście, im wyższa częstotliwość taktowania oraz im więcej urządzeń peryferyjnych zostanie uaktywnionych, tym większy będzie poziom mocy pobieranej przez układ mikrokontrolera (μc) [2]. Maksymalna częstotliwość taktowania APB1 wynosi 36MHz, natomiast dla APB2 to 72MHz (równa częstotliwości systemowej). W układach bardziej złożonych można znaleźć dodatkowe interfejsy, przykładowo w układy klasy CL zawierają kontrolery USB i Ethernet [3]. 2. Laboratoryjny zestaw uruchomieniowy Programy przygotowywane dla μc w trakcie zajęć laboratoryjnych są testowane w zestawie uruchomieniowym złożonym z płyty rozwojowej ZL30ARM, programatora BF30, klawiatury macierzowej KAmodKB4x4 oraz dwuwierszowego wyświetlacza alfanumerycznego LCD ze sterownikiem zgodnym ze standardem HD44780. Dokumentację poszczególnych modułów można pobrać ze strony przedmiotu umieszczonej na Platformie Zdalnej Edukacji (PZE) [4]. Złącze interfejsu JTAG Złącze interfejsu RS232 Złącze USB Zasilanie zewn. Włącznik zasilania Slot kart SD Kwarc gen. LSE STM32F103RB Kwarc gen. HSE Kołki montażowe peryferyjnych bloków zewnętrznych i wyprowadzeń μc Joystick RESET Rys.2. Moduły laboratoryjnego zestawu uruchomieniowego Blok pomiaru temperatury

Przed przystąpieniem do ćwiczeń laboratoryjnych warto sprawdzić poprawność ustawień podstawowych zworek konfigurujących i mikroprzełącznika programatora. Poprawne ustawienia poszczególnych połączeń konfigurujących laboratoryjny zestaw uruchomieniowy zostały zilustrowane na Rys.3. S2 dowolnie DISPLAY CHAR S1 JTAG PWR_SEL USB 32kHz ON BOOT1 1 BOOT2 1 JP1, JP2 PU USB otwarte Rys.3 Standardowe ustawienia zworek w laboratoryjnym zestawie uruchomieniowym Oczywiście oprócz zworek konfigurujących w poszczególnych ćwiczeniach laboratoryjnych należy wykonać połączenia w polu kołków montażowych zgodnie z wymaganiami opisanymi w instrukcji. 3. Instalacja pakietu oprogramowania Ćwiczenia laboratoryjne są realizowane z wykorzystaniem środowiska Eclipse współpracującego z szeregiem programów dedykowanych dla procesorów ARM (tzw. GNU ARM toolchain). Instalacja i integracja poszczególnych komponentów od podstaw jest żmudna i czasochłonna. Dla celów niniejszego laboratorium został przygotowany pakiet ze skonfigurowanym programem Eclipse, umożliwiający szybkie uruchomienie środowiska pracy. Oprogramowanie można pobrać ze strony kursu Platformy Zdalnej Edukacji (PZE), kolejne etapy instalacji są przedstawione poniżej. Z uwagi na niekomercyjny charakter zastosowanego oprogramowania można spodziewać się pewnych niedogodności, np. należy postępować szczególnie ostrożnie przy wyborze nazw katalogów (tzn. unikać spacji i nietypowych znaków), gdyż stosowanie nietypowych oznaczeń może mieć nieoczekiwany i zaskakujący wpływ na pracę oprogramowania. W celu uproszczenia opisu i uniknięcia wspomnianych problemów zostało przyjęte założenie instalacji całego pakietu we wspólnym katalogu C:\STM32, w którym został umieszczony katalog roboczy C:\STM32\workspace realizowanych projektów (i taka struktura lokalizacji oprogramowania została zachowana na stanowiskach komputerowych w sali laboratoryjnej).

I. Pobrać spakowany pakiet stm32_all.7z ze strony kursu i katalog STM32 rozpakować na dysku C. W efekcie, struktura katalogów powinna być taka jak ta zaprezentowana na Rys.4. Rys.4 Struktura katalogu STM32 II. W kolejnym kroku należy przejść do instalacji sterowników programatora JTAG. W laboratorium jest wykorzystywany m.in. programator BF30 ( www.boff.pl ), który dodatkowo emuluje port transmisji szeregowej (COM) poprzez interfejs USB (Virtual COM Port). Po podłączeniu programatora BF 30 do złącza USB komputer wykryje dwa nowe kanały transmisji z urządzenia OOCDLink. III. Na początku, dla pierwszego kanału nowego urządzenia USB wybieramy sterownik instalowany z dysku, ze wskazanej lokalizacji: C:\STM32\inst\drivers\libusbwin32_ft2232_driver-110810 -> CALAO Systems USB-A9260-Co1 (Channel A), tj. sterownik kompatybilny z OOCDLink. IV. Dalej, instalowany jest sterownik wirtualnego portu COM dla kanału B. Postępując podobnie jak w poprzednim kroku, należy wskazać oprogramowanie sterowników z katalogu C:\STM32\inst\drivers\vcp. Docelowe własności komputera podawane przez okno Menadżera urządzeń zostały przedstawione na Rys.5. Rys.5 Urządzenia wykryte po instalacji sterowników programatora BF30 V. Ponadto, podczas zajęć jest też używany programator kompatybilny z modelem ST-Link udostępniający porty JTAG oraz SWD. Do obsługi programatora ST-Link należy zainstalować w

VI. systemie Windows odpowiedni sterownik z katalogu C:\STM32\inst\drivers\stlink_driver pakietu oprogramowania. Dodatkowo, emulację portu szeregowego przy obsłudze interfejsu USB z urządzeniem klasy CDC (ang.communication Device Class) dla układów STM32 zapewnia sterownik udostępniony przez producenta (C:\STM32\inst\drivers\stm32_vcp_driver). Okno wyświlane podczas instalacji jest pokazane na Rys.6. Rys.6 Okno instalacji sterownika VCP VII. Można już uruchomić Eclipse (C:\STM32\eclipse\eclipse.exe), utworzenie skrótu do tego programu ułatwi uruchamianie środowiska pracy. Program ten korzysta z bibliotek Java (http://www.java.com/pl/download/ ). Na Rys.7 jest przedstawiony standardowy układ okien programu Eclipse. Przycisk przesłania programu do zestawu uruchomieniowego (External Tools) Okno edytora kodu źródłowego Informacje nt plików nagłówkowych, i funkcji edytowanego kodu Okno katalogu projektu Konsola informacji przebiegu kompilacji/programowania Rys.7 Środowisko Eclipse Dla ułatwienia rozpoczęcia pracy nad nowym tematem przerabianym na ćwiczeniach laboratoryjnych, przygotowany pakiet zawiera wzorcowy szablon projektu, który będzie podstawą do budowy własnego oprogramowania μc. Dlatego na początku każdych zajęć należy skopiować projekt Szablon nadając kopii nazwę Lab. Należy podkreślić, że programy testowane podczas zajęć będą uruchamiane z pamięci RAM mikrokontrolera (przesyłanie i uruchamianie poprzez

Externaltools->Lab_RAM) i są one kasowane po wyłączeniu zasilania zestawu uruchomieniowego. Natomiast, aby przesłać i uruchomić program z pamięci FLASH należy zmienić konfigurację pinów BOOT μc, zamienić skrypt linkera ram.ld na flash.ld (we własnościach projektu) oraz wykonać przesyłanie i uruchamianie poprzez Externaltools->Lab_FLASH. 4. Biblioteka API dla układów STM32 Producent układów serii STM32, firma STMicroelectronics dostarcza bibliotekę Standard Peripheral Firmware Library (SPFL) w skład której wchodzi moduł CMSIS (Cortex Microcontroller Software Interface Standard) zawierający m.in. funkcje obsługi rdzenia ARM i skryptów inicjalizujących oraz moduł Standard Peripherial Driver zawierający funkcje obsługi urządzeń peryferyjnych. Biblioteka ta stanowi podstawowy interfejs programowania aplikacji (API) w języku C. Dodatkowo, producent udostępnił szereg przykładowych aplikacji i opisów ułatwiających obsługę μc, w tym bibliotekę obsługi interfejsu USB. Wsparcie dla układu STM32F103RBT6 można znaleźć w dziale Design support na stronie: http://www.st.com/internet/mcu/product/164487.jsp. Aktualnie dostępna biblioteka SPFL ma wersję 3.5.0, jej struktura jest przedstawiona na Rys.8 (katalog Library w oknie szablonu projektu). Katalog funkcji interfejsu CMSIS Funkcje obsługi rdzenia Skrypty startowe przygotowane dla różnych środowisk programistycznych i różnych klas uc Definicje adresów, struktur, klasy uc Funkcje ustawiające sygnały zegarowe i inicjalizujące uc Katalog plików nagłówkowych i implementacyjnych funkcji obsługi urządzeń peryferyjnych Plik pomocy dla funkcji API Aktualny skrypt startowy Plik doboru modułów obsługi urządzeń peryferyjnych Pliki: nagłówkowy i implementacyjny funkcji obsługi przerwań Pliki skryptowe linkera Rys.8 Struktura projektu wzorcowego Podkatalog startup zawiera skrypty wykorzystywane podczas uruchamiania μc, które zostały przygotowane dla różnych środowisk programistycznych (na laboratorium korzystamy z darmowego kompilatora klasy gcc i μc klasy MD, stąd kopię dedykowanego mu pliku startup_stm32f10x_md.s umieszczono w głównym katalogu projektu). W pliku stm32f10x.h należy ustalić ( odkomentować ) definicje klasy μc i ustawić stałą USE_STDPERIPH_DRIVER, która informuje kompilator o korzystaniu z bibliotek SPFL. Dostępne klasy układu to:

-STM32F10X_LD: STM32 Low density devices -STM32F10X_LD_VL: STM32 Low density Value Line devices -STM32F10X_MD: STM32 Medium density devices -STM32F10X_MD_VL: STM32 Medium density Value Line devices -STM32F10X_HD: STM32 High density devices -STM32F10X_HD_VL: STM32 High density value line devices -STM32F10X_XL: STM32 XL-density devices -STM32F10X_CL: STM32 Connectivity line devices. Przykładowo, układ STM32F103RBT6 należy do klasy Medium Density i ta definicja jest ustawiona w szablonie projektu. Plik system_stm32f10x.c zawiera m.in. kod funkcji SystemInit() ustalającej parametry zegarów taktujących procesor i magistrale. W projekcie szablonowym wybrano maksymalną częstotliwość systemową dostępną dla μc, tj.72mhz. Należy podkreślić, że wartość zegara systemowego oraz taktującego magistrale może również być ustalana z wykorzystaniem funkcji API dostępnych w module stm32f10x_rcc.h biblioteki SPFL. Opis tych funkcji jest zawarty m.in. w pliku pomocy stm32f10x_stdperiph_lib_um.chm, który będzie jednym ze źródeł informacji przydatnej przy wykonywaniu zadań laboratoryjnych. Pliki nagłówkowe i implementacyjne dostępnych funkcji API obsługi urządzeń peryferyjnych μc są umieszczone w podkatalogu STM32F10x_StdPeriph_Driver. Oczywiście, w danym projekcie zwykle potrzebne są tylko wybrane peryferia, dlatego odpowiednie dla nich moduły dedykowane powinny być dołączone do projektu w pliku konfiguracyjnym stm32f10x_conf.h. Ponadto, w strukturze projektu wzorcowego można znaleźć m.in. pliki stm3210x_it.h oraz stm3210x_it.c, które zawierają odpowiednio: nagłówki i implementacje funkcji obsługujących przerwania. 5. Uruchomienie pierwszego projektu Jak wspomniano wcześniej, projekt Szablon będzie projektem bazowym wykorzystywanym do wykonania zadań laboratoryjnych i jest on dostępny w oknie eksploratora projektów programu Eclipse. Jednak w przypadku, gdy został on usunięty lub zmodyfikowany, można go łatwo odtworzyć importując projekt zapisany w pliku archiwalnym Szablon.zip, który można pobrać ze strony przedmiotu umieszczonej na PZE. W celu zaimportowania projektu z archiwum, należy wskazać kursorem myszy okno eksploratora projektu i wcisnąć jej prawy przycisk. Następnie wybieramy Import->Existing Project intoworkspace i w polu Select Archive File podajemy ścieżkę do pliku importowanego. Jeżeli projekt wzorcowy jest dostępny, można już wykonać jego kopię ze zmianą nazwy z Szablon do Lab (po wskazaniu katalogu projektu Szablon w oknie eksploratora należy wcisnąć prawy przycisk myszy i wykonać polecenie Copy). Tak przygotowany projekt o nazwie Lab, będzie odpowiednio edytowany w celu wykonania zadania laboratoryjnego. Jednym z podstawowych elementów projektowania urządzenia wykorzystującego μc jest konfiguracja częstotliwości zegara systemowego. Układ STM32F103RBT6 posiada rozbudowany system konfiguracji sygnałów taktujących rdzeń, wewnętrzne urządzenia peryferyjne i magistrale. Typowa wartość rezonatora kwarcowego generatora HSE (High SpeedExternal) to 8MHz, ale dzięki wbudowanemu układowi PLL, systemowa częstotliwość taktująca może być dobierana przez ustalenie dogodnego współczynnika powielania. Oczywiście, w przypadku gdy nie jest potrzebna duża dokładność sygnału taktującego, to można skorzystać z wbudowanego w μc generatora HSI (High SpeedInternal). Oprócz generatora wysokiej częstotliwości, układ μc pozwala korzystać z sygnału o mniejszej częstotliwości (32768Hz) stabilizowanego przez zewnętrzny rezonator (LSE) lub mniej dokładnego, wytworzonego przez wewnętrzny generator RC (LSI). Sygnał ten może być

wykorzystywany m.in. do taktowania wbudowanego układu RTC (Real Time Clock). W celu konfiguracji sygnałów taktujących można skorzystać z odpowiednich funkcji modułu stm32f10x_rcc.h umieszczonego w bibliotece API. Jednak podstawowe parametry sygnałów zegarowych mogą być również zdefiniowane poprzez edycję pliku biblioteki API system_stm32f10x.c zawierającego m.in. funkcję SystemInit(), która jest wywoływana w momencie restartu układu μc (z programu sturtup_stm32f10x_md.s realizującego inicjalizację). Standardowo (również w projekcie wzorcowym), częstotliwość systemowa jest ustalona na maksymalną wartość 72MHz (mnożnik PLL równy 9), natomiast magistrale urządzeń peryferyjnych APB1 i APB2 są taktowane odpowiednio z częstotliwościami 36MHz i 72MHz. Zakładając, że wszystkie kroki instalacji oraz konfiguracji środowiska programistycznego i sterowników opisane wcześniej przebiegły pomyślnie, można już przetestować projekt wzorcowy Szablon. Plik źródłowy programu głównego main.c z projektu Szablon został przedstawiony poniżej. Po dołączeniu w sekcji Includes modułów stm32f10x.h i stm32f10x_conf.h niezbędnych dla podstawowego projektu, w kodzie źródłowym są umieszczone prototypy funkcji GPIO_Configuration() i Delay(), których części implementacyjne umieszczono poniżej funkcji głównej main(). Pierwsza z tych funkcji uaktywnia port GPIOA, tj. przez wywołanie funkcji RCC_APB2PeriphClockCmd() załączany jest z magistrali APB2 (Rys.1) jego zegar taktujący, a następnie wykonywana jest konfiguracja trybu pracy pinu. Inicjalizacja pinu następuje po wywołaniu funkcji GPIO_Init(), której argumentami są identyfikator portu oraz referencja do zdefiniowanej wcześniej struktury konfigurującej (tj. GPIO_Mode_Out_PP - wyjście przeciwsobne, GPIO_Speed_2MHz- maksymalna częstotliwość sygnału 2MHz). Druga funkcja pozwala uzyskać opóźnienie pracy programu i jej argumentem jest liczba całkowita ncount określająca czas opóźnienia (dla zegara systemowego 72MHz, ncount=1 odpowiada ok.0,2μs). W programie głównym, na początku wywoływana jest funkcja konfigurująca port μc, a następnie w pętli while{ wykonywane jest cyklicznie ustawianie i zerowania pinu 0 portu A (funkcje GPIO_SetBits() i GPIO_ResetBits() ) z opóźnieniem określonym przez argumenty funkcji Delay(). /* Includes ------------------------------------------------------------------*/ #include"stm32f10x.h" #include"stm32f10x_conf.h" /* Private function prototypes -----------------------------------------------*/ voidgpio_configuration(); voiddelay( IO uint32_tncount); GPIO_InitTypeDefGPIO_InitStructure; intmain(void) { GPIO_Configuration(); while (1) { GPIO_SetBits(GPIOA,GPIO_Pin_0); Delay(200000); GPIO_ResetBits(GPIOA,GPIO_Pin_0); Delay(1000000); /* Private functions ---------------------------------------------------------*/ voidgpio_configuration(void) { GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* Configure LED output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); voiddelay( IO uint32_tncount) { uint8_ti; for(; ncount!= 0;nCount--) {i=0; Działanie projektu wzorcowego można łatwo przetestować, przesyłając go do zestawu uruchomieniowego. W tym celu należy wykonać połączenie pomiędzy pinem PA0 oraz LED0 na płycie ZL30ARM, a następnie podłączyć ją i programator BF30 do portów USB komputera (zasilanie i komunikacja zestawu startowego z PC poprzez USB). Dalej, w programie Eclipse należy wykonać kompilację projektu Szablon (Project->BuildAll lub Ctrl-B) i wysłać kod programu do pamięci RAM układu μc (External Tools->Szablon_RAM). Jeśli wszystko przebiegło pomyślnie, program zostanie uruchomiony w zestawie startowym (sterowanie diodą LED D0). Poniżej został opisany scenariusz przebiegu realizacji prostego projektu z wykorzystaniem udostępnionego programu wzorcowego. Zadanie Korzystając z funkcji RCC_GetSYSCLKSource(), sprawdź jakie jest aktualne źródło zegara systemowego, tj. dla źródeł HSI, HSE, PLL powinny być załączone odpowiednio LED D0, D1, D2 płyty startowej. Krok 1: Po uruchomieniu środowiska Eclipse, wykonać kopię projektu Szablon ze zmianą nazwy do Lab. Krok 2: Zapoznać się z opisem funkcji RCC_GetSYSCLKSource() w pliku pomocy stm32f10x_stdperiph_lib_um.chm, który można znaleźć w katalogu biblioteki funkcji API (ew. znaleźć opis w Internecie): uint8_t RCC_GetSYSCLKSource ( void ) Returns the clock source used as system clock. Parameters: None Return values: The clock source used as system clock. The returned value can be one of the following: 0x00: HSI used as system clock 0x04: HSE used as system clock 0x08: PLL used as system clock Krok 3: W projekcie Lab modyfikujemy konfigurację pinów portu GPIOA, dodając identyfikatory dodatkowych dwóch: /* Configure LED output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 GPIO_Pin_1 GPIO_Pin_2;

Krok 4: Edytujemy kod źródłowy funkcji głównej main(),tj. po konfiguracji portu GPIO należy dodać zerowanie pinów: GPIO_ResetBits(GPIOA,GPIO_Pin_0 GPIO_Pin_1 GPIO_Pin_2); Następnie należy wymienić kod wykonywany w pętli while() na następujący: switch (RCC_GetSYSCLKSource () ) { case 0x00: { GPIO_SetBits(GPIOA,GPIO_Pin_0); break; case 0x04: { GPIO_SetBits(GPIOA,GPIO_Pin_1); break; case 0x08: { GPIO_SetBits(GPIOA,GPIO_Pin_2); break; default: break; Krok 5: Zapisujemy nowy kod źródłowy (Ctrl-S) i wykonujemy kompilację (Ctrl-B), jeśli przebiegł pomyślnie (potwierdzenie wygenerowania pliku kodu maszynowego Lab.elf wyświetlane w oknie konsoli) to można przejść do uruchomienia programu. Krok 6: Przy wyłączonym zasilaniu wykonujemy odpowiednie połączenia pomiędzy pinami PA0..PA2 oraz LED0..LED2 na płycie ZL30ARM i podłączamy zestaw d portów USB. Krok 7: Przesyłamy program do zestawu uruchomieniowego (External Tools->Szablon_RAM). Literatura [1] www.st.com [2] http://ep.com.pl/files/8684.pdf [3] Reference Manual-RM0008 [4]http://platforma.polsl.pl/rau3/ [5] Marek Galewski, "STM32 - Aplikacje i ćwiczenia w języku C", ISBN 978-83-60233-82-5, Wydawnictwo BTC, Legionowo 2011. [6] Krzysztof Paprocki, "Mikrokontrolery STM32 w praktyce", ISBN 978-83-60233-52-8, Wydawnictwo BTC, Legionowo 2009, 2011 wyd. I poprawione. [7] www.mikrokontroler.pl