Blog (16)
Komentarze (1.1k)
Recenzje (0)

ARM: STM32F4 Discovery pierwsze wrażenia

@revcoreyARM: STM32F4 Discovery pierwsze wrażenia02.08.2012 22:31

Od pewnego czasu można zaobserwować wzmożone zainteresowanie układami ARM. Obecnie wszedłem w posiadanie STM32F4 Discovery. Opartej o rdzeń Cortex-M4F.

O układzie

STM32F4 Discovery to płytka startowa oparta o rdzeń Cortex-M4F. Rdzeń ten należy do rodziny układów wykorzystujących instrukcje Thumb2. Polecenia te umożliwiają pracę na danych 16 i 32-bitowych, ujmując najkrócej tego typu polecenia umożliwiają gęstsze upakowanie poleceń i szybsze działanie niż w przypadku instrukcji ARM7 i ARM9 ale niestety programy napisane przy wykorzystaniu ARM7 i ARM9 wymagają przystosowania do thumb2, dlatego nici z linux(aczkolwiek nie do końca) i windows embedded. Występująca w nazwie literka F świadczy o obecności jednostki FPU. Jednostka ta przyspiesza operacje na liczbach zmiennoprzecinkowych. Jak bardzo? W przykładzie kodu generującego fraktal uruchomienie jednostki FPU(domyślnie jest ona wyłączona) spowodowało wykonywanie się kodu od 17 do 19 razy szybciej. Niektóre modele tych rdzeni maja jeszcze zintegrowane jednostki wspomagające szyfrowanie. Sam układ może pracować maksymalnie z częstotliwością 168 Mhz(wykorzystując wewnętrzną pętle PLL).

Wygląd płytki z st.com
Wygląd płytki z st.com

Płytka to w zasadzie poprowadzone ścieżki z układu do goldpinów aczkolwiek dorzucono bonusy :). Na płytce znajduje się zintegrowany  ST-LINK/V2 pozwalający na programowanie i debugowanie(Interfejs SWD). Ponadto na płytce znajdziemy złącze USB-OTG(niestety nie można tego traktować jako zwykłego portu USB),akcelerometr(można np. zrobić z płytki myszkę),mikrofon oparty o MP45DT02,przetwornik audio CS43L22, 8 diod led(ale tylko 4 można sterować), dwa przyciski(reset i użytkownika).

Programowanie

Jeśli idzie o programowanie mamy sporo środowisk do wyboru: -IAR(w wersji darmowej ograniczenie do 32 Kb kodu wynikowego) -Keil uvision(w wersji darmowej ograniczenie do 32 Kb kodu wynikowego) -True Studio(oparte o GCC-ARM ale także z ograniczeniem do 32 Kb) -Ride(samo IDE, trzeba dociągnąć toolchain ARM) -GCC-ARM + IDE(np. Eclipse) Osobiście używam TrueStudio opartego o Eclipse

Główne okno True Studio
Główne okno True Studio
Debbugowanie w True Studio
Debbugowanie w True Studio

Niemniej jednak planuję przesiadkę na ide bez ograniczeń jeśli idzie o kod wynikowy. Jeśli idzie o programowanie na linuks(windows też) i wykorzystanie GCC-ARM. W internecie znalazłem parę różnych opisów połączenia GCC-ARM i Eclipse. Największym problemem jest Debugowanie. Aczkolwiek da się uruchomić. Niedługo sprawa debbugowania i konfiguracji zostanie uproszczona dzięki wydaniu OpenOCD 0.6 które będzie obsługiwało ST-Link V2. Może z jakiś czas opiszę cała procedurę. Przejdźmy do programowania i prostego kodu. Podczas tworzenia nowego projektu można od razu odnaleźć STM32F4 Discovery na liście obsługiwanych płytek co załatwia praktycznie za nas konfigurację całej płytki.

#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //1
    GPIO_InitTypeDef  GPIO_InitStructure;//2
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
//GPIOD->BSRRL=0xffff;
GPIOD->ODR=0x0000;//3
  while (1)
  {
	for(;i<5000000;i++){
		x++;
		}
	i=0;
	GPIOD->ODR=0xf000;
	for(;i<5000000;i++){
		--x;
		}
	GPIOD->ODR=0x0000;
i=0;
  }
}

1)Musimy odblokować zegar dla portów. Konkretnie dla portu D(GPIOD) ponieważ tam znajdują się 4 ledy(Pin12,13,14,15). Zegar(tzn. porty są wyłączone) jest domyślnie wyłączony aby oszczędzać energię 2)Konfigurację(i nietylko) różnych rejestrów można przeprowadzać na dwa sposoby. Wykorzystując bibliotekę Standard Perhapsial Library lub poprzez bezpośrednie manipulowanie rejestrami. Zaletą SPL jest ukrycie operacji niskopoziomowych i czytelniejszy kod, niestety sposób implementacji samej biblioteki powoduje spory narzut na pamięć i czas wykonywania operacji(do wykonania operacji może być konieczne wykonanie nawet 2-3 razy więcej instrukcji assemblera niż przy bezpośrednich manipulacjach), moim zdaniem jeśli nie mamy dużych wymagań co do wykorzystania pamięci warto używać struktur do inicjalizacji peryferiów,zegarów itp. A pozostałe operacje wykonywać na rejestrach. W tym punkcie korzystamy z SPL. Najpierw musimy utworzyć strukturę w której znajdują się wszelakie potrzebne instrukcje. Następnie odwołując się do odpowiednich pól ustawiamy interesujące nas piny, prędkość ich działania, tryb pracy(wej./wyj.), podciągnięcie do masy/zasilania/brak. Na końcu inicjujemy port. 3)W tym przypadku odnosimy się bezpośrednio do rejestru, rejestr ten pozwala na ustawienie stanu portu(0 lub 1). Konkretnie ustawiamy wszystkie porty na 0. Następnie pętla for służąca jako prymitywne opóźnienie. Później ustawiamy odpowiednie cztery porty czyli wpisujemy szesnastkowo 0xf000.

I gotowe diody mrugają. Ktoś może zapytać, „dobrze a gdzie inicjalizacja zegara?”. Otóż można to robić na dwa sposoby. Ręcznie(wykorzystując struktury lub bezpośrednio rejestry) bądź skorzystać z wygenerowanego pliku z ustawieniami zegarów i szyn(po wybraniu płytki podczas tworzenia projektu takowy plik jest dodawany automatycznie, częstotliwość wtedy to 168 MHz). Tu korzystam właśnie z takiego pliku. Mała uwaga domyślnie(przy każdym uruchomieniu) układ startuje na wewnętrznym zegarze dopiero po uruchomieniu można wykorzystać opcjonalnie zewnętrzny oscylator i wewnętrzną pętle PLL.

Ciekawostka, tak prosty kod przy ustawieniu w opcjach kompilatora braku optymalizacji działa poprawnie, przy ustawieniu -O1 diody mrugają znacznie szybciej, użycie -O2 i -O3 powoduje brak mrugania diod, skorzystanie z opcji optymalizacji wielkości kodu wynikowego -Os powoduje także brak działania ale objętość kodu spada o przeszło 50%. Ogólnie trudno oceniać pracę kompilatora na podstawie tak prymitywnego kodu(prawie pusta pętla for) niemniej warto najpierw napisać program przy braku optymalizacji a potem zmieniać ustawienia.

Nie ma róży bez kolców. A jest nią dokumentacja STM32. Jako osoba przyzwyczajona do dokumentacji Atmela muszę powiedzieć że jestem nieco zawiedziony. Ogólnie dokumentacja jest gorzej napisana niż w przypadku atmela, niektóre informacje ciężko znaleźć lub są według mnie połebkach.

Podsumowanie

W płytce drzemie olbrzymia moc(w stosunku do układów 8/16-bitowych) i potencjał. Chociaż jest to rdzeń z linii układów o niskiej wydajności gdzie najważniejsza jest energooszczędność. Niedługo dalsze wieści z frontu :)

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.