Płytka przyszła z Farnella fajna i migająca od urodzenia wbudowanym LEDEM. Trochę mi to popsuło zamysły bo co chciałem z tą płytką zrobić na samym początku? Oczywiście zamigać ledem

Nefarious19 pięknie opisał temat instalacji Eclipse pod Windowsa więc nie pozostało mi nic innego jako podążyć jego tropem. Nie będę powtarzał tych mądrości które zawiera post mojego mądrego kolegi.
Po zainstalowaniu środowiska przyjrzałem się mojej Disco:

Płytka wygląda elegancko. I posiada własny programator ST-LINK ver.1. Cóż podłączyłem pod mojego Windowsa i... System zrobił mi niespodziankę. Płytka działa, LED miga z różnymi prędkościami w zależności od dotknięcia palcem płytki dotykowej. Każde kolejne dotknięcie płytki powoduje wzrost częstotliwości migania na zasadzie: pierwsza prędkość, druga prędkość, trzecia prędkość, wyłączenie.
https://youtu.be/5XKB1nNZPW0
(Na filmie wychwyciłem niestety tylko trzy fazy, nie wiedzieć czemu

Ale w systemie owa płytka została u mnie znaleziona jako urządzenie magazynujące a nie jako programator ST-LINK.
I za żadne skarby nie chciała być widziana inaczej. Próbowałem instalacji sterowników, aktualizacji firmware i dziesiątek innych opcji. Niestety nie chciała ze mną współpracować. Dlatego odłamałem od płytki programator, z wielkim bólem serca, bo nie lubie tego rodzaju dewastacji. I podłączyłem do niej mój zakupiony na Aliexpress programator ST-LINK/2 z wbudowanym złączem SWIM do programowania między innymi właśnie takich maluchów.
Ta operacja w pewnym momencie przyniosła oczekiwane przeze mnie rezultaty i płytka zaczęła ze mną (z systemem) współpracować.
Podłączyłem ją do programatora a programator do USB. Potrzebne było jeszcze zasilanie w związku z tym wykorzystałem konwerter FTDI który akurat miałem pod ręką jako zasilacz


No dobra, kwestie sprzętu mamy załatwioną. Spróbujmy wreszcie coś napisać.
Dlaczego na rejestrach? Chciałem zobaczyć jak to będzie. Bez bibliotek, bez otoczki...
Wziąłem notę i popatrzyłem co tam namazali. Zaczynałem od AVR i pamiętałem, że trzeba określić port i pin

Jeżeli jednak chcemy dowiedzieć się coś więcej o rejestrach to musimy sięgnąć po notę naszego mikrokontrolera.
Na początku zobaczmy jak wygląda z zegarem naszego kontrolera. W nocie na stronie 16 mamy informację:

Jak widać, po resecie uC pracuje z prędkością 2MHz. Aby wykorzystać pełne 16MHz, które daje nam mikrokontrolera należy ustawić we właściwy sposób preskaler. Jak? Oczywiście szukamy w nocie informacji.
Na stronie 35 znajdujemy odpowiednią informację:

Pod adresem 0x00 50C6 mamy rejestr z etykietą CLK_CKDIVR o nazwie Clock divider register. Chcąc pracować z pełną prędkością zegara musimy mu w naszym programie (po każdy restarcie urządzenia) nadać wartość 0.
Teraz szukamy informacji na temat portu i pinu. Wiemy, ze nasz LED jest podłączony do PORT D, do PIN 0. Przeszukujemy notę i na stronie 32 mamy tabelę:

Widzimy informację o interesującym nas porcie D. Nas do naszego przykładu interesują trzy PD_ODR, PD_DDR oraz PD_CR1.
Są to odpowiednio: Port D data output latch register o adresie 0x00 500F (ustawiamy pin jako wyjście), Port D data direction register o adresie 0x00 5011 (ustawiamy kierunek danych), Port D control register 1 o adresie 0x00 5012.
Teraz wystarczy te informacje umieścić w naszym programie.
Definiujemy sobie nazwy rejestrów tak jak się nazywają w tabelce:
Kod: Zaznacz cały
#define CLK_DIV *(unsigned char*)0x50C6
#define PD_ODR *(unsigned char*)0x500F
#define PD_DDR *(unsigned char*)0x5011
#define PD_CR1 *(unsigned char*)0x5012
unsigned long int delay;
void main()
{
// teraz nadajemy im odpowiednie wartości:
CLK_DIV = 0x00; //ustawiam zegar
PD_ODR = 0x0; //ustawiamy stan niski dla całego portu D
PD_DDR |= 1 << 0; //Ustawiamy pin PD0 jako wyjście
PD_CR1 |= 1 << 0; //ustawiamy pin PD0 jako PP (push-pool)
while(1) { PD_ODR ^= 1 << 0;
for(delay = 0 ; delay < 250000; delay++){}; //tu taki prostacki delajek, który służy nam jako opóźnienie czasowe
}
}
Wgrywamy...
I działa!
I to by było na tyle. I niech mi powie, że to było coś strasznego

Dopiszę jeszcze post jak to zrobić z mikrokontrolerem STM8S103F3. Ale to już osobno bo i płytka inna i jest pewna mała ciekawostka dotycząca udostępnionych na płytce pinów.
gdyby ktoś przypadkiem doczytał do końca a znalazł jakiś błąd lub miał jakieś merytoryczne uwagi proszę o informację, chętnie dokonam poprawek.