Programowanie pamięci zewnętrznych w systemie z STM32 za pomocą ST-Link

Programowanie pamięci zewnętrznych w systemie z STM32 za pomocą ST-Link
Pobierz PDF Download icon
Podczas budowania systemów mikroprocesorowych wyposażonych w zewnętrzne układy pamięci często pojawia się potrzeba podglądu i modyfikacji ich zawartości. O ile z dostępem do wewnętrznej pamięci mikrokontrolera najczęściej nie ma problemu (realizuje to programator/debugger), o tyle z dostępem do pamięci zewnętrznych dołączonych do mikrokontrolera nie jest już tak łatwo. Można oczywiście posiłkować się specjalnie tworzonymi do tego celu funkcjami, umieszczanymi w programie, które wspomagają debugowanie zawartości zewnętrznej pamięci, np. przez łącze szeregowe UART, jednak nie zawsze jest to możliwe i wygodne, zwłaszcza gdy zastosowany mikrokontroler nie ma wolnej pamięci programu na dodatkowe funkcje. W przypadku mikrokontrolerów STM32 istnieje jednak alternatywa. Jest nią program narzędziowy o nazwie ST-Link Utility, firmy STMicroelectronics do obsługi programatora/debuggera ST-Link.

Dla produkowanych przez siebie mikrokontrolerów rodziny STM32 firma STMicroelectronics dostarcza programator/debugger ST-Link [1] oraz obsługujący go program narzędziowy o nazwie ST-Link Utility [2]. Podstawowym przeznaczeniem tego programu jest programowanie z poziomu komputera PC wewnętrznej pamięci Flash mikrokontrolerów STM32 oraz ustawianie ich bitów konfiguracyjnych zgrupowanych w tzw. Option Bytes. Na tym jednak nie kończą się możliwości programu ST-Link Utility, ponieważ ma on dodatkową, bardzo przydatną w praktyce konstruktora funkcję, którą jest możliwość zapisu i odczytu w systemie zewnętrznych pamięci dołączonych do mikrokontrolera STM32. Funkcja ta kryje się w menu programu pod nazwą External Loader.

Obsługa zewnętrznej pamięci jest realizowana przez program ST-Link Utility w niezwykle interesujący sposób. Otóż program ten ładuje do pamięci SRAM mikrokontrolera kod maszynowy funkcji realizującej zadaną operację, np. odczytu danych z zewnętrznej pamięci. Następnie kod ten jest wykonywany przez mikrokontroler, a uzyskane w trakcie tego procesu dane są pobierane z mikrokontrolera przez program ST-Link Utility i prezentowane użytkownikowi na ekranie komputera PC. Mechanizm ten jest na tyle uniwersalny, że może być użyty nie tylko do odczytu i zapisu pamięci, lecz także do obsługi innych dołączonych do mikrokontrolera układów, do których dostęp odbywa się przez zapis i odczyt rejestrów, czyli np. do zegara RTC. Jak nietrudno się domyślić, ładowany do pamięci SRAM mikrokontrolera kod, nazywany dalej sterownikiem pamięci zewnętrznej, jest w zasadzie specjalizowanym programem dla mikrokontrolera STM32, zależnym od typu mikrokontrolera, rodzaju i typu zewnętrznej pamięci oraz sposobu jej podłączenia do mikrokontrolera. W folderze ExternalLoader programu ST-Link Utility znajduje się kod sterowników realizujących obsługę pamięci zewnętrznych w produkowanych przez firmę STMicroelectronics zestawach rozwojowych mikrokontrolerów STM32. W przypadku, gdy konstruowany układ wykorzystuje moduł pamięci, który nie był stosowany w jednym z zestawów rozwojowych STM32, lub też pamięć ta jest inaczej podłączona niż w zestawie ewaluacyjnym, sterownik obsługi tej pamięci dla programu ST-Link Utility musi zostać napisany przez użytkownika. Zagadnienie tworzenia sterowników jest omówione w rozdziale 3.9 instrukcji obsługi programu ST-Link Utility. Niestety, opis ten jest dość skromny i ogranicza się zaledwie do kilkunastu zdań. Z tego też względu podjęto próbę zaprezentowania na przykładowym układzie z mikrokontrolerem STM32, jak wygląda pisanie takiego sterownika.

Układ demonstracyjny

Schemat ideowy układu, dla którego zostanie przedstawiony proces tworzenia sterownika obsługi pamięci zewnętrznych dla programu ST-Link Utility, prezentuje rysunek 1. Układ ten składa się z modułu STM32F0DISCOVERY [3], do którego dołączono pamięć EEPROM typu X24C08 oraz zegar RTC typu PCF8583. Moduł STM32F0DISCOVERY jest tanim zestawem ewaluacyjnym dla mikrokontrolera STM32F051, wielokrotnie już opisywanym na łamach „Elektroniki Praktycznej”. Warto przypomnieć, że moduł ten jest wyposażony w mikrokontroler typu STM32F051R8T6 z rdzeniem Cortex-M0, mający 64 kB wewnętrznej pamięci Flash i 8 kB wewnętrznej pamięci SRAM. W module DISCOVERY znajduje się także wbudowany układ programatora/debuggera ST-Link V2. Układ X24C08 [4] jest z kolei pamięcią EEPROM o pojemności 8 kbit i organizacji 1024×8 bit, wyposażoną w interfejs i2c. Układ PCF8583 [5] jest natomiast kombinacją zegara RTC i pamięci SRAM, zorganizowanych jako pamięć o pojemności 256 B. Pierwsze 16 komórek tej pamięci to rejestry zegara RTC, podczas gdy kolejne 240 B to komórki pamięci SRAM. Podobnie jak pamięć EEPROM, układ PCF8583 jest wyposażony w interfejs i2c. W prezentowanym przykładzie oba układy są doł?czone do?wsp?lnej magistrali ączone do wspólnej magistrali i2c, obsługiwanej przez sprzętowy układ interfejsu I2C2 mikrokontrolera STM32F051 w module DISCOVERY. Linie SCL i SDA tego interfejsu są wyprowadzone odpowiednio na porty PF6 i PF7 mikrokontrolera i dostępne na wyprowadzeniach 19 i 18 złącza P2 modułu DISCOVERY. Pamięć EEPROM jest skonfigurowana do pracy na magistrali i2c pod adresem bazowym 0xA8, natomiast układ PCF8583 pracuje pod adresem bazowym 0xA0.

Ponieważ zastosowana w prezentowanym przykładzie pamięć X24C08 jest przystosowana do zasilania wyłącznie napięciem +5 V, zdecydowano się na zasilanie wszystkich układów dołączonych do magistrali i2c napięciem +5 V pobieranym z modułu DISCOVERY. Nie stanowi to problemu, ponieważ linie PF6 i PF7 mikrokontrolera STM32F051 tolerują sygnały o napięciu +5V, a układ zegara PCF8583 może pracować w zakresie napięć zasilania od +2,5 V do +6,0 V. Oczywiście w przypadku użycia niskonapięciowej wersji pamięci EEPROM, mogącej pracować przy napięciu +3,3 V, cały układ demonstracyjny może być zasilony bezpośrednio z tego napięcia. Jest ono dostępne na wyprowadzeniu nr 1 złącza P1 modułu DISCOVERY. Zmontowany układ przedstawiono na fotografii 2.

Kod sterownika pamięci zewnętrznych

Ponieważ w układzie demonstracyjnym znajdują się dwa różne typy pamięci zewnętrznych, do ich obsługi przez program ST-Link Utility konieczne jest napisanie dwóch oddzielnych sterowników. Na szczęście algorytmy odczytu i zapisu danych z/do pamięci X24C08 oraz zegara PCF8583 są na tyle zbliżone, że możliwe jest wygenerowanie kodu maszynowego sterownika dla każdego z powyższych układów na podstawie tego samego kodu źródłowego, w którym bezpośrednio przed kompilacją modyfikowane są jedynie parametry konfiguracyjne układu pamięci, takie jak wielkość pamięci, jej adres bazowy, itp.

Pierwszym krokiem w pisaniu sterownika zewnętrznej pamięci jest stworzenie w używanym środowisku programistycznym IDE pustego projektu dla mikrokontrolera STM32F051. Projekt ten powinien być linkowany do pamięci SRAM, poczynając od adresu 0x20000004. W przeciwieństwie do typowych programów pisanych dla mikrokontrolerów w języku C, wykonany projekt nie wymaga dołączania plików z kodem startowym. Przy tworzeniu pustego projektu sterownika najprościej wzorować się na jednym z przykładowych projektów sterowników pamięci zewnętrznych SRAM i Flash, które są dostarczane razem z programem ST-Link Utility i znajdują się w folderze ExternalLoader. Projekty te są przystosowane do kompilatorów dostępnych w kilku popularnych środowiskach IDE, więc nie powinno być problemów z importem przykładowego projektu do używanego środowiska programistycznego. Dołączony do artykułu kod sterowników pamięci X24C08 i zegara PCF8583 był kompilowany przy użyciu pakietu GCC. Strukturę tego projektu przedstawia rysunek 3. Foldery IncSrc zawierają odpowiednio pliki nagłówkowe i kod źródłowy uniwersalnego sterownika układów X24C08 i PCF8583. W folderze Libraries znajdują się z kolei pliki bibliotek CMSIS dla rdzeni Cortex-M oraz dla mikrokontrolerów rodziny STM32F0xx. W folderach _obj_bin jest umieszczany kod wynikowy.

Do wykonania sterowników umożliwiających programowi ST-Link Utility obsługę układów X24C08 i PCF8583 potrzebne są funkcje realizujące inicjalizację mikrokontrolera i jego układów peryferyjnych obsługujących magistralę i2c oraz funkcje odczytu i zapisu danych z/do układów dołączonych do magistrali I2C. Można do tego celu użyć gotowych funkcji z biblioteki STM32F0xx_StdPariph_Lib lub funkcji z nowszej biblioteki HAL – Hardware Abstraction Layer. Niestety, obie biblioteki mają opinię dość „pamięciożernych”, co może mieć znaczenie w przypadku mikrokontrolerów wyposażonych w pamięć SRAM o mniejszej pojemności, ponieważ w tej pamięci musi się zmieścić nie tylko kod maszynowy sterownika, lecz także bufory danych tworzone przez program ST-Link Utility do komunikacji ze sterownikiem. Co prawda zainstalowana w module DISCOVERY wersja mikrokontrolera STM32F051 ma 8 kB pamięci SRAM i raczej nie należy spodziewać się w tym przypadku problemów, jednak przy tworzeniu prezentowanego sterownika założono, że będzie on działał również na wersji mikrokontrolera STM32F051 z pamięcią SRAM o pojemności 4 kB. Z tego też powodu zdecydowano się na napisanie własnej funkcji inicjalizacji układu peryferyjnego obsługującego magistralę I2C, a także własnych funkcji odczytu i zapisu bloku danych z/do układu dołączonego do magistrali i2c. Wykonane na potrzeby projektu funkcje operują bezpośrednio na rejestrach mikrokontrolera i wykorzystują automatyczny tryb transmisji danych układu komunikacyjnego I2Cx mikrokontrolera STM32F051, przez co odznaczają się małym zapotrzebowaniem na pamięć programu i pamięć danych. W omawianym projekcie sterownika funkcje te zostały zgrupowane w pliku źródłowym i2c_eeprom.c, który znajduje się w folderze Src prezentowanego projektu. Szczegółowe omawianie kodu źródłowego tych funkcji wykracza poza ramy artykułu. Osoby zainteresowane tym tematem powinny przeanalizować kod zawarty w pliku i2c_eeprom.c, który znajduje się w materiałach dołączonych do artykułu. Listę funkcji zdefiniowanych w pliku i2c_eeprom.c zestawiono w tabeli 1.

Umieszczone w pliku i2c_eeprom.c funkcje obsługi pamięci EEPROM są uniwersalne i zapewniają obsługę przez mikrokontroler STM32F051 układu pamięci EEPROM typu 24Cxx mieszczącej od 128 B do 2 kB dołączonego do dowolnego układu peryferyjnego I2Cx mikrokontrolera. Konfiguracja używanego układu I2Cx mikrokontrolera, jego linii wyjściowych, jak również parametrów pamięci EEPROM, tj. jej rozmiaru, wielkości jej strony pamięci oraz adresu na magistrali i2c, jest realizowana przez odpowiednie deklaracje #define zebrane w pliku nagłówkowym i2c_eeprom.h, znajdującym się w folderze Inc projektu.

 

Układ zegara RTC typu PCF8583 można traktować jako pamięć szeregową i2c o rozmiarze 256 B. Ponieważ wymiana danych z tym układem przebiega praktycznie identycznie, jak w przypadku pamięci EEPROM, nie ma sensu tworzenie dla tego układu dedykowanych funkcji obsługi, ponieważ układ PCF8583 może być obsługiwany przez funkcje napisane dla pamięci EEPROM. W celu zminimalizowania przez funkcję zapisu i2c_eeprom_WriteBlock() zbędnej kontroli gotowości układu PCF8583 do wykonania kolejnej operacji, należy jednak przed kompilacją projektu dla układu PCF8583 ustawić rozmiar zapisywanej strony pamięci (parametr EEPROM_PAGE_LEN) na wartość 128 B. Optymalnym rozwiązaniem byłoby zadeklarowanie dla tego układu rozmiaru strony pamięci równego 256 B, jednak konstrukcja funkcji i2c_eeprom_WriteBlock() nie dopuszcza takiej możliwości. Poza zmianą rozmiaru strony pamięci nie należy oczywiście zapomnieć, w przypadku kompilacji projektu dla układu PCF8583, o ustawieniu rozmiaru pamięci (parametr EEPROM_SIZE) na 256 B i zmianie adresu układu na magistrali i2c (parametr EEPROM_HWD_ADDR) na 0xA0.

Dysponując funkcjami inicjalizacji układu peryferyjnego I2Cx mikrokontrolera oraz zapisu i odczytu danych do/z układów dołączonych do magistrali i2c, można przystąpić do pisania właściwego kodu sterownika pamięci zewnętrznych dla programu ST-Link Utility. Sterownik ten składa się z trzech plików: pliku nagłówkowego Dev_Inf.h oraz dwóch plików z kodem sterownika: Dev_inf.cLoader_Src.c.

Plik nagłówkowy Dev_Inf.h jest umieszczony w folderze Inc prezentowanego projektu i zawiera definicje możliwych rodzajów pamięci oraz definicje struktur opisujących cechy pamięci, którą obsługuje sterownik. Zawartość pliku nagłówkowego przedstawia listing 1. Jak widać, autorzy programu ST-Link Utility przewidzieli możliwość obsługi 10 różnych rodzajów pamięci zewnętrznych. Rodzaj zadeklarowanej pamięci ma jednak znaczenie przede wszystkim informacyjne i tylko w niewielkim stopniu wpływa na algorytm obsługi pamięci przez program ST-Link Utility. Główna różnica polega na kasowaniu, bądź też nie, pamięci zewnętrznej przed zapisem nowych danych. W przypadku pisania sterownika dla układu, którego nie ma na liście, wystarczy wybranie z tej listy rodzaju pamięci jak najbardziej zbliżonej sposobem działania.

Plik Dev_Inf.c jest umieszczony w folderze Src prezentowanego projektu i zawiera strukturę StorageInfo z opisem pamięci obsługiwanej przez sterownik. Struktura ta jest linkowana do wydzielonej sekcji programu i informacje w niej zawarte są wykorzystywane przez program ST-Link Utility do wyboru właściwego sterownika oraz algorytmu kasowania i zapisu pamięci zewnętrznej. Struktura StorageInfo obejmuje 7 pól.

Pierwsze pole DeviceName zawiera tekstowy opis sterownika. Opis ten jest jest wyświetlany przez program ST-Link Utility podczas wyboru sterownika, więc warto zadbać, aby był on pełny i jednoznacznie identyfikował nie tylko pamięć, ale i jej otoczenie. Dzięki temu uniknie się sytuacji, w której w programie ST-Link Utility są zainstalowane np. dwa sterowniki pamięci 24C08, różniące się tylko numerem wykorzystywanego w mikrokontrolerze STM32F051 układu I2Cx i opisane „24C08”. Przy tak niejednoznacznym opisie nie będzie możliwe wybranie właściwego sterownika z listy dostępnych sterowników pamięci zewnętrznych wyświetlanej w programie ST-Link Utility.

Drugie pole DeviceType struktury StorageInfo zawiera definicję rodzaju zewnętrznej pamięci. Jak wspomniano, zadeklarowany rodzaj pamięci determinuje sposób obsługi przez program ST-Link Utility pamięci zewnętrznej przy zapisie danych. W przypadku układu X24C08 pole to przyjmuje wartość I2C_EEPROM z predefiniowanej listy rodzajów pamięci w pliku nagłówkowym Dev_Inf.h. W przypadku zegara RTC typu PCF8583, ponieważ tego rodzaju układu nie ma na wyżej wspominanej liście, polu temu przypisano najbardziej zbliżony rodzaj pamięci z listy, tj. SRAM.

Kolejne dwa pola struktury DeviceStartAddressDeviceSize definiują odpowiednio adres bazowy pamięci zewnętrznej w przestrzeni adresowej mikrokontrolera STM32 oraz rozmiar tej pamięci. Każde odwołanie w programie ST-Link Utility do adresu w zakresie od DeviceStartAddress do DeviceStartAddress+DeviceSize-1 będzie skutkowało tym, że dostęp do pamięci będzie realizowany za pośrednictwem danego sterownika. W prezentowanym przykładzie przyjęto, że pamięć EEPROM będzie widoczna w przestrzeni adresowej mikrokontrolera STM32 pod adresem bazowym 0x60000000, natomiast zegar RTC – pod adresem bazowym 0x60001000. Adres 0x60000000 jest początkiem obszaru w przestrzeni adresowej mikrokontrolerów ARM, w którym typowo są umieszczane pamięci zewnętrzne. Pole DeviceSize przyjmuje w przypadku układów X24C08 i PCF8583 wartości odpowiednio 0x400 (tj. 1 kB) i 0x100 (tj. 256 B).

Pole PageSize określa rozmiar strony pamięci zapisywanej w pojedynczym cyklu. W przypadku pamięci EEPROM typu X24C08 firmy Xicor zapisywana strona pamięci ma długość 16 B. Należy jednak pamiętać, że układy pamięci 24C08 innych producentów mogą różnić się rozmiarem zapisywanej strony pamięci. Dlatego też każdorazowo należy zweryfikować tę wartość w karcie katalogowej używanego układu. Zegar RTC nie ma takich ograniczeń i cały ten układ może być zapisany w jednym cyklu. Jak już jednak wcześniej wspomniano, ze względu na ograniczenia funkcji i2c_eeprom_WriteBlock() zapisu bloku danych przyjęto, że rozmiar strony pamięci zegara RTC wynosi 128 B, więc ten układ będzie zapisywany w dwóch cyklach.

Ostatnie dwa pola struktury StorageInfo zawierają zawartość komórki pamięci po skasowaniu (pole EraseValue) oraz listę sektorów pamięci i ich rozmiarów (pole sectors). Ponieważ w prezentowanym przykładzie są używane układy, które nie wymagają wcześniejszego kasowania przed zapisem nowych danych, pola te nie mają praktycznego znaczenia. Zarówno w przypadku układu X24C08, jak i PCF8583 przyjęto, że rozmiar sektora jest równy pojemności układu. Wartości (0x00000000, 0x00000000) są znacznikami końca listy sektorów. Zawartość wypełnionej struktury StorageInfo dla pamięci 24C08 oraz zegara PCF8583 przedstawiają listing 2listing 3.

Plik Loader_Src.c zawiera właściwy kod sterownika pamięci zewnętrznej. Ma on postać 6 funkcji, za których pośrednictwem program ST-Link Utility obsługuje pamięć zewnętrzną. Zostały one umieszczone w tabeli 2. Jak widać, nie wszystkie funkcje muszą być zaimplementowane dla każdego rodzaju pamięci. Część z nich jest albo zbędna, albo też opcjonalna. W prezentowanym przykładzie, zarówno dla pamięci X24C08, jak i dla zegara PCF8583, wymagana jest jedynie implementacja funkcji Init(), Read()Write(). Zostały one przedstawione na listingu 4. Dzięki właściwemu doborowi listy argumentów niskopoziomowych funkcji obsługi pamięci EEPROM, implementacja funkcji sterownika ogranicza się w zasadzie do wywołania odpowiedniej funkcji niskiego poziomu obsługującej układ dołączony do magistrali I2C. W przypadku funkcji Init() nie było potrzeby dodatkowej konfiguracji systemu generowanie sygnałów zegarowych mikrokontrolera STM32F051. Taktowanie układu z domyślnego generatora HSI o częstotliwości 8 MHz jest w wypadku obsługi magistrali I2C ze standardową częstotliwością 100 kHz zupełnie wystarczające.

Prezentowany sterownik może zostać dodatkowo rozbudowany o funkcję Verify(), dzięki czemu możliwa będzie weryfikacja zawartości pamięci podczas procesu zapisu danych. W omawianym przykładzie zrezygnowano jednak z tej możliwości. W takiej sytuacji zawartość pamięci jest weryfikowana dopiero po zakończeniu zapisu, w drodze odczytu zawartości całego układu.

Instalowanie sterownika

Otrzymany w wyniku kompilacji projektu plik wynikowy *.elf jest w zasadzie gotowym sterownikiem pamięci zewnętrznej. Należy jedynie zmienić rozszerzenie nazwy pliku z .elf na .stldr i umieścić tak zmodyfikowany plik w folderze ExternalLoader programu ST-Link Utility. W prezentowanym przykładzie operację tę należy wykonać dwukrotnie, najpierw dla pliku *.elf uzyskanego przy kompilacji projektu z ustawieniami dyrektyw #define i struktury StorageInfo dla pamięci EEPROM X24C08, a następnie dla zegara PCF8583. Po uruchomieniu programu ST-Link Utility oba układy powinny pojawić się na liście obsługiwanych pamięci zewnętrznych w oknie Add External Loader menu External Loader (rysunek 4). Po zaznaczeniu obu układów i akceptacji dokonanego wyboru program ST-Link Utility jest gotowy do obsługi tych układów.

O poprawnym zainstalowaniu w programie ST-Link Utility obu sterowników układów dołączonych do magistrali i2c mikrokontrolera świadczy pojawienie się dwóch nowych pozycji w menu External Loader. Oba nowe punkty menu odpowiadają odpowiednio pamięci EEPROM X24C08 i zegarowi RTC PCF8583 i pozwalają na odczyt oraz zapis tych układów danymi zawartymi w pliku (rysunek 5).

Odczyt i zapis pamięci X24C08 i zegara PCF8583 jest także możliwy z poziomu okna głównego programu ST-Link Utility. W przypadku wybrania adresu leżącego w zakresie adresów przypisanych pamięci EEPROM (tj. 0x60000000-0x600003FF) zostanie automatycznie załadowany sterownik pamięci EEPROM i odczytana zawartość tej pamięci, natomiast w przypadku wybrania adresu leżącego w zakresie adresów przypisanych zegarowi RTC (tj. 0x60001000-0x600010FF) użyty zostanie sterownik układu PCF8583 i odczytana zawartość tego układu. Rysunki 5 i 6 przedstawiają różne etapy obsługi układów X24C08 i PCF8583 przez program ST-Link Utility.

W przypadku zapisu pierwszych 16 komórek układu PCF8583 program ST-Link Utility może sygnalizować błąd zapisu danych. Jest to spowodowane tym, że komórki te są w istocie rejestrami zegara RTC i część z nich, gdy zegar jest uruchomiony, ciągle zmienia swą wartość. Tak dzieje się np. z komórkami o adresach od 0x60001001 do 0x60001006, które są odpowiednio licznikami milisekund, sekund, minut, godzin, dni i miesięcy. W takiej sytuacji pomiędzy zapisem danej komórki pamięci przez program ST-Link Utility a jej odczytem w celu weryfikacji poprawności zapisu wartość licznika odpowiadającego milisekundom, sekundom itd. może się zmienić. Stąd sygnalizowany przez program ST-Link Utility błąd zapisu danych. Powyższe zachowanie układu PCF8583 można łatwo zaobserwować w programie ST-Link Utility, dokonując w regularnych odstępach czasu odczytu zawartości zegara RTC. Komórki odpowiadające licznikom czasu będą zmieniały swoją zawartość zgodnie z upływającym czasem. Sygnalizowany problem błędu zapisu danych nie dotyczy oczywiście komórek pamięci o adresach powyżej 0x60001010, ponieważ są to komórki standardowej pamięci SRAM w układzie PCF8583.

Podsumowanie

Napisanie sterownika pamięci zewnętrznych dla programu ST-Link Utility nie jest skomplikowane i nie wymaga wielkich nakładów czasu i pracy, ponieważ zazwyczaj i tak większość funkcji niskiego poziomu obsługujących pamięć zewnętrzną jest tworzona w ramach projektu konstruowanego urządzenia, więc warto poświęcić kilka dodatkowych chwil i zaimplementować taki sterownik. Może on oddać nieocenione usługi podczas pisania i testowania oprogramowania budowanego układu.

Możliwość odczytu i zapisu w systemie pamięci zewnętrznej dołączonej do mikrokontrolera STM32 rozwiązuje też problem umieszczania w tej pamięci danych startowych, które z takich czy innych powodów nie są przechowywane w wewnętrznej pamięci Flash mikrokontrolera. Mogą to być np. dane identyfikacyjne urządzenia, takie jak jego numer seryjny czy data produkcji, lub też indywidualne parametry kalibracyjne obwodów pomiarowych, ale nie tylko. Program ST-Link Utility może posłużyć np. do umieszczania w pamięci zewnętrznej zestawów czcionek lub grafik wykorzystywanych przez oprogramowanie urządzenia.

Wreszcie program ST-Link Utility może zostać użyty do testowania układu zewnętrznego, w omawianym przykładzie zegara RTC. Możliwość zapisu i odczytu poszczególnych rejestrów układu z poziomu komputera PC w łatwy sposób pozwala na zapoznanie się z funkcjonowaniem danego układu, bez konieczności umieszczania funkcji testowych w programie mikrokontrolera. Jak widać, możliwości stwarzane przez ST-Link Utility są dość szerokie, więc warto wykorzystywać je w pełni.

Aleksander Borysiuk
alex_priv@wp.pl

 

Bibliografia

− ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32, User manual UM1075, STMicroelectronics.
− STM32 ST-LINK Utility software description, User manual UM0892, STMicroelectronics.
− STM32F0DISCOVERY Discovery kit for STM32F0 microcontrollers, User manual UM1525, STMicroelectronics.
− 8 kbit serial E2PROM X24C08 1024×8 Bit, Product data sheet, Xicor Inc.
− PCF8583 Clock and calendar with 240×8-bit RAM, Product data sheet, NXP.

 

Artykuł ukazał się w
Elektronika Praktyczna
wrzesień 2016
DO POBRANIA
Pobierz PDF Download icon

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów