Witam serdecznie
od pewnego czasu stałem się posiadaczem zestawu HY-Mini STM32V i napotkałem na problem przy obsłudze wyświetlacza TFT.
Problem tyczy się ustalenia jaki kontroler wyświetlacza TFT siedzi w moim zestawie. Wraz z płytką dostałem folder, w którym przykładowy kod posiada wiele inicjalizacji dla różnych kontrolerów i wykonuje się w zależności od tego jaki device kod wysyła wyświetlacz. Magistarala danych wyświetlacza (D0...D15) jest podłączona w nieuporządkowany sposób, czyli D0 jest podpięty do PD14, D2 do E0 itd. podczas gdy wszystkie przykładowe kody działają tak, że piny danych są podpinane w uporządkowany sposób czyli D0 do PE0 , D1 do PE1 itd.
Myślałem, że nie będzie z tym problemu i napisałem kod badając na który pin został wysłany bit poprzez instrukcje if i przypisując go do zmiennej value, poniżej umieszczam kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Następnie wartosc wysłaną z rejestru 0x00 (przechowującą device kod) przypisałem do rejestru ODR GPIOA , aby miernikiem posprawdzać które piny ustawiły się na stan wysoki, a które są w stanie niskim aby w ten sposób odczytać ID.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Niestety ustawiły się tylko PA13 i PA15.
Postanowiłem odkręcić wyświetlacz i podłączyć go osobno kabelkami w uporządkowany sposób i wykorzystać funkcję które są załączone w przykładach. Tym razem udało mi się z czytać następującą wartość:1010 0100 0000 1000 czyli w hex A408. Przypomina to device kod sterownika SPFD5408B, z tą jednak różnicą, że tam device kod jest 5408.
Zainicjalizowałem wyświetlacz kodem dotyczącym SPFD5408 (czyli 5408) i wszystko działa dobrze.
Jednak nie dają mi spokoju dwie kwestie; pierwsza to dotycząca funkcji przeze mnie napisanych, które miały z czytywać device id warunkami if, dlaczego to nie działało i z czytywane były tylko PA14 i PA15. Druga kwestia dotyczy tej różnicy między A408 a 5408, czyli tak jakby te końcowe cztery bity zostały przesunięte o jeden w prawo (1010 a powinno być 0101).
Bardzo był bym wdzięczny jeśli ktoś rozwieje moje wątpliwości, może ktoś się spotkał z podobnym problemem.