Postanowiłem oderwać się od moich zabawek, bo już śniły mi się po nocach. Jednak nie lubię bezczynności, więc wyciągnąłem z szuflady Blue Pill. Trochę już tam poleżał, bo wpadł mi w ręce MBC2. Żeby nie było zbyt dużo nowych rzeczy na raz, podłączyłem STM-a do IDE Arduino. Nie było łatwo. Przeczytałem kilka poradników, w każdym znajdowałem coś innego, ale ciągle bez rezultatu. Wgrałem bootloader, ale i tak USB nie było widoczne...
Niektóre fragmenty nie brzmiały zachęcająco. Np. "Programming AVRs was a walk in the park... Compared to that, developing for ARM is like trying to stroll in the middle of a raging battlefield." - Mahesh Venkitachalam, albo - "Jeśli po wgraniu bootloadera oraz zainstalowaniu sterowników Arduino IDE widzi w Portach twoją płytkę, ale nie może na nią wgrać programu, najwyraźniej miałeś pecha." (to z Elektrody). Poddałem się.
Wyciągnąłem Black Pill. Teraz było błyskawicznie. Wgrałem bootloader, od razu płytka się odezwała. Prosty "skecz" też działał, jednak okazało się, że to co chciałem zrobić, nie da się skompilować... Znowu porażka. Nigdzie nie znalazłem opisu, jak dostać się do rejestrów GPIO. Na pewno inaczej niż w F103. Ale kiedy przestawiłem z powrotem na GenericSTM32F103... kompilacja się udała. Wgrywanie też w końcu opanowałem - ST-Link sobie poradził, mimo że USB milczał. Po wgraniu programu na USB pojawił się Mapple Mini... Nic z tego nie rozumiem. W końcu podłączyłem konwerter TTL-USB i jakoś wszystko ruszyło. Jednak to, co na AVR działa bez zarzutu na "pierwsze kopnięcie", wymagało wiele zachodu. Kombinowałem na różne sposoby. Pomogło dopiero sprawdzanie, czy na pinach nadal jest to samo po upływie 1 milisekundy. Bez tego wyświetlacz pomigał i gasł zupełnie. Teraz też trochę miga, ale coś widać. Oczywiście wykorzystałem mój sprawdzony kod, który wysyła na terminal wyświetlacz CA80.
https://www.youtube.com/watch?v=DEdjRc4j2BU&feature=youtu.be
Tak wygląda schemat połączeń:
Kod: Zaznacz cały
// ------------------------------------------------------------------------------
// Wyswietlacz CA80 na terminalu via BluePill
// ------------------------------------------------------------------------------
// CA80 ZW: 1 (+5V) NC BluePill
// 2 (c) --> PB10 //Żeby nie machać bitami
// 3 (d) --> PB11 //na prawo i lewo
// 4 (b) --> PB9 //wolę pobawić się kabelkami
// 5 (e) --> PB12 // ;-)
// 6 (a) --> PB8
// 7 (f) --> PB13
// 8 (g) --> PB14
// 9 (k) --> PB15
// 10 (PC5)--> PB3
// 11 (PC6)--> PB4
// 12 (PC7)--> PB6
// 13 (GND)--> GND
// ------------------------------------------------------------------------------
A tak "battlefield":
Najważniejsza część kodu wygląda tak:
Kod: Zaznacz cały
void readCA80disp()
{
word CA80_display = (GPIOB->regs->IDR) & 0xFF58; //PB 15-8,6,4,3
delay(1); //Tu jest zmiana w stosunku do ATmegi
if (CA80_display == (GPIOB->regs->IDR) & 0xFF58);
{
byte d = 0 | (((CA80_display & 0x40) >> 4 ) | ((CA80_display & 0x10) >> 3 ) | ((CA80_display & 0x8) >> 3));
if (d != lastDispNum) //czy inna cyfra niz poprzednio (zmiana co 2 ms)
{
byte k = ((CA80_display & 0xFF00) >> 8); //Biorę starszy bajt
k = k ^ 0xFF; //(negacja bo zapalony segment = 0)
lastDispNum = d; //numeracja od lewej (w CA80 odwrotnie)
if (bufDisp[7 - d] != k) //czy zawartosc sie zmienila
{
bufDisp[7 - d] = k;
change = true;
}
}
}
}
Czy ktoś może coś doradzi? Może nie powinienem używać niektórych pinów? Wybrałem te, które mają FT w opisie. W F401 wszystkie w PB tolerują 5 V, ale w F103 musiałem ominąć najmłodsze. Siedzę już trzeci dzień od świtu do zmierzchu... albo odwrotnie