logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[STM32F429][IAR] - STemWin nic nie wyświetla, problem początkującego

Smutas88 04 Maj 2015 12:23 1539 3
REKLAMA
  • #1 14667290
    Smutas88
    Poziom 2  
    Posty: 2
    Witam Elektrodowiczów! Jest to mój pierwszy post tutaj, mam nadzieję że umieszczam go zgodnie z regulaminem.
    Zwracam się z prośbą o pomoc w sprawie STemWin. Jest to moja pierwsza styczność z nie tylko z tą biblioteką, ale też z architekturą ARM, więc od razu uprzedzam że mogłem popełnić kilka klasycznych błędów początkującego wynikających z czystego braku doświadczenia.

    Do urządzenia które zaprojektowałem i już zmontowałem mam dołączony wyświetlacz TFT. Wiem że jest poprawnie dopięty do procesora, ponieważ daje się inicjować i obsługiwać bezpośrednio biblioteką HAL. Założyłem jednak obsługę bardziej zaawansowaną i wygodniejsze wydało mi się użycie biblioteki STemWin ze względu na dużą popularność i szerokie wsparcie, jednak nie umiem jej poprawnie użyć. Po zainicjowaniu wyświetlacza i (jak mi się wydaje) poprawnym zainicjowaniu biblioteki program przelatuje przez funkcje jej obsługi ale wyświetlacz kompletnie na to nie reaguje. Po przeczytaniu dokumentacji do STemWin i emWin oraz wszystkiego sensownego co udało mi się namierzyć w internecie, dochodzę do wniosku że źle adresuję pamięć... VRAM_ADDR adresuję na 0x60000000 czyli FMC Bank1, ponieważ to była jedyna wartość ze wszystkich które przetestowałem i nie zapętlała GUI_Init. Niestety jeśli faktycznie na tym polega błąd, to nie wiem jak powinienem to zrobić żeby było dobrze. :(

    Czy mogę Was, bardziej doświadczonych użytkowników, poprosić o jakieś rady i wskazówki mogące pomóc mi w uruchomieniu tego ustrojstwa?



    Pozwolę sobie wypisać wszystkie potencjalnie przydatne informacje na temat tego co mam i co zrobiłem:

    Software:
    - Środowisko IAR EWARM w najnowszej wersji, licencja 30-dniowa
    - Biblioteka STemWin 5.22
    - Bazowy kod źródłowy urządzenia wygenerowany przez STM32CubeMX

    Hardware:
    - Procesor STM23F429IGT6, ustawiony na taktowanie 168MHz
    - Wyświetlacz Innolux AT050TN33 v.1, dopięty 24 bitowo
    - Dołączony zewnętrzny RAM Hynix H57V2562GTR-75C, w CubeMX ustawiony jako FMC SDRAM Bank1
    (Próbowałem dodać linki do datasheetów, ale forum mi nie pozwala ze względu na zbyt mało postów)

    Firmware:
    - dołączyłem preprocessorowi folder INC biblioteki stemwin
    - dołączyłem linkerowi plik STemWin522_CM4_IAR.a
    - dołączyłem do kompilacji pliki GUIConf.c, GUI_X.c i LCDConf.c jako LCDConf_LIN_Template.c ze zmienioną nazwą
    - w pliku GUIConf.c zdefiniowałem GUI_NUMBYTES jako (1024 * 171)
    - w pliku LCDConf.c zdefiniowałem wymiary wyświetlacza X/Y 480/272, COLOR_CONVERSION GUICC_8888, DISPLAY_DRIVER GUIDRV_LIN_24, VRAM_ADDR 0x60000000 oraz usunąłem LCD_SetDevFunc dotyczące nadpisania funkcji _CopyBuffer, _CopyRect, _FillRect, _DrawBitmap8bpp, _DrawBitmap16bpp
    - w pliku main.c wywołuję kolejno:
    RCC->AHB1ENR |= RCC_AHB1ENR_CRCEN;
    GUI_Init();
    GUI_SetColor(GUI_RED);
    GUI_DispStringAt("Hello world!", 100, 100);

    Czy jeszcze jakieś informacje powinienem teraz podać?
  • REKLAMA
  • #2 14671908
    QuadMan
    Poziom 14  
    Posty: 53
    Pomógł: 11
    Ocena: 3
    Witam,
    daj może spakowany projekt, bo tak to ciężko coś powiedzieć. Ja co prawda nie uruchamiam swoich projektów na IAR, ale może znajdą się inni, którzy pomogą. Ale jak czytam o CubeMX, to podświadomie czuję problemy ;-).
    Inicjalizujesz wyświetlacz? STemWin wymaga inicjalizacji wyświetlacza, ona tego nie robi. I jeszcze trzeba wybrać typ wyświetlacza, ala w tej chwili nie pamiętam, w którym pliku to było.

    Pozdrawiam, QuadMan.
  • REKLAMA
  • #3 14671993
    Smutas88
    Poziom 2  
    Posty: 2
    Wyświetlacz na szczęście się odpala, wybrałem dla niego sterownik liniowy.

    Doszedłem już dzisiaj do tego że problem faktycznie tkwi w pamięci, ponieważ nawet pomijając gui_init() procesor wywala mi HardFault_Handler przy próbie korzystania z zewnętrznego ramu. Z tej okazji pojawiła mi się nowa zagadka: mam źle inicjowaną pamięć czy złą konfigurację DMA... To jest moja pierwsza przygoda z armami i faktycznie im dalej w las tym więcej drzew. Czy mogę poprosić o zweryfikowanie moich wypocin i wytknięcie bzdur które poczyniłem? Będę dozgonnie wdzięczny za sprawdzenie :)

    Mój RAM to Hynix H57V2562GTR-75C, datasheet jest tutaj: DATASHEET. Zegar procesora taktuję 168MHz.

    Parametry dla ramu poustawiałem w ten sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Konfiguracja kanału DMA:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Natomiast moje DMA2D prezentuje się tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 14674419
    QuadMan
    Poziom 14  
    Posty: 53
    Pomógł: 11
    Ocena: 3
    Witam ponownie,

    Kompletnie nie znam IAR-a, nie wiem gdzie jest ld script dla linkera ( i czy tam w ogóle się to ustawia , no aleś skąd kompilator musi wiedzieć, że odwołujesz się do zewnętrznego RAM- u), "na oko" nie widzę błędów w inicjalizacji RAM-u ani DMA i DMA2D.
    Ja bym na Twoim miejscu zaczął od tego, że wyłączył bym wyświetlacz, DMA, i DMA2D i doszedł do ładu z RAM-em. Sprawdź może swoją konfigurację z czymś na STM32F429I do ST ( choćby poszukaj czegoś do DISCOVERY ). A dodatkowo, z tego co pamiętam, w LCD_conf musi być:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Wkleiłem konfigurację drivera od innego wyświetlacza - tu mam po FSMC, ale na pewno konieczne jest to:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i to:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Oczywiście podstawiasz do tego swój driver i jego parametry. Tam są jeszcze API do zapisu i odczytu z wyświetlacza, ale e tej chwili nie pamiętam, jak jest z driverem LIN, trzeba by zajrzeć do manuala.
REKLAMA