Koleżankom i Kolegom Radioamatorom, Krótkofalowcom,
Konstruktorom i Waszym Rodzinom – w tych trudnych czasach –
po dotkliwej awarii naszego forum
Pogodnego czasu po Bożym Narodzeniu,
Dosiego Nowego Roku
oraz Radosnych Trzech Króli

Życzy Zespół Home Made

Ankieta: Jaki system operacyjnym preferujesz
Nie posiadasz uprawnień, aby oddać głos w tej ankiecie.
Windows
60.78%
31 60.78%
Linux
31.37%
16 31.37%
MAC/OS
7.84%
4 7.84%
Inny
0%
0 0%
Razem 51 głosów 100%
*) odpowiedź wybrana przez Ciebie [Wyniki ankiety]

Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie ARM, nauka, środowiska programistyczne IDE
Hey

Jakoś ostatnio mało czasu mam na hobby i nie mam czasu opakować wszystkiego w ładną całość wstawię wam to w kawałkach z instrukcją montażu. Jakiś czas temu umieściłem już na elektrodzie paczkę z plikami do obsługi LCD. Paczka ta była modyfikacją do przykładowego projektu freddiego chopina (użytkownik elektrody).
link do przykładu:
http://www.freddiechopin.info/pl/downloa...-przyklady

Jest to przykład działający na "czystym eclipsie" bez arm plugin czy cocooxa. Dodane są tylko plugny (zylin, gdb) do debugu oraz wskazany kompilator. Jako że bazuje on na makefile myślę że niema najmniejszego problemu przenieś przykład na dowolne środowisko, ja jednak do tej pory pracuje na tym. Na jego stronie jest już troche przestarzała instrukcja jak zrobić to środowisko. Jeśli ktoś ma ochotę to mogę pomóc je złożyć.

Po zaimportowaniu tego środowiska należy rozpakować moją paczkę i podmienić/dodać pliki.

I tyle po skompilowaniu ekran będzie się świecił na biało(w moim przypadku wychodzi ten przeklęty lekki turkus).

Aby zacząć malować wystarczy dodać/skonfigurować warstwę po skonfigurowaniu LCD:

LTDC_Layer1->WHPCR = 30 | (269 <<16);
LTDC_Layer1->WVPCR = 4 | (323 <<16);
LTDC_Layer1->PFCR = 0b0;
LTDC_Layer1->CFBAR = 0xD0000000;
LTDC_Layer1->CFBLR = 963 | (960 <<16);
LTDC_Layer1->CFBLNR = 320;
LTDC_Layer1->CR |= LTDC_LxCR_LEN;
LTDC_Layer1->CACR = 0xFF;
LTDC->SRCR = LTDC_SRCR_IMR;
LTDC->GCR |= LTDC_GCR_LTDCEN;

I od tej pory ramka rozpoczyna się od adresu:
0xD0000000;
każdy piksel to 32 bity format ARGB8888.

Umieszczam to abyście mogli zacząć się temu przyglądać/wzorować się na tym. Nie wykluczam błędów. U mnie to działa ale możliwe że dokonałem modyfikacji których w tej paczce nie umieściłem. Jednak muszę znaleźć więcej czasu bo nie chce dodawać wersji która jest zlepkiem różnych eksperymentów, a tak właśnie wygląda najaktualniejszy kod źródłowy na którym pracuje. Musze zacząć od nowego projektu, poskładać to co jest potrzebne i po sprawdzeniu wam to udostępnię.


Załączone pliki
.rar   Modyfikacja LCD do stm32f4_blink_led.rar (Rozmiar: 109.05 KB / Pobrań: 970)
Odpowiedz
Pokazuje kolega przykladowy ekran i pisze ze lcd pod LTDC dziala. Ten przyklad jest niekompletny, brakuje w nim plikow.

Dlaczego w programie nie ma inicjowania pamieci SDRAM?
Dla jakiego zegara stm32f429 jest ta konfiguracja?
Odpowiedz
dla 180 MHz

sdram jest inicjowany w pliku system_init są funkcje które są wywoływane przez startup tam jest inicjalizacja sdram i zegara
Odpowiedz
Dzieki za wyjasnienia, nie moglem tego zlokalizowac w programie.

Zrobilem z tego projekt pod Em, dadalem pliki i teraz poprawnie sie kompiluje.
Hyba cos jest zle w inicjowaniu sdramu bo po kilku zapisach do ramki obrazu wiesza stma. Za malo wiem o oblsudze pamieci dynamicznych aby to namierzyc.
Czy udalo sie komus uruchmic ten kod i moze zapisywac do sdramu ?
Nie widze rowniez zadnych zmian na LCD przy zapisie do ramki obrazu.


Załączone pliki
.zip   lcd_ltdc.zip (Rozmiar: 206.37 KB / Pobrań: 681)
Odpowiedz
while (1)
{
//zielona dioda LED
for (count = 0; count < count_max; count++); // delay
LED_bb = 1;
for (count = 0; count < count_max; count++); // delay
LED_bb = 0;

*((uint32_t *)ptr++) = 0xFFFFFFFF; //pixel do ramki obrazu
}

Tu masz błąd. Ta pętla w końcu zaczyna zapisywać w rejony poza ramem.
Odpowiedz
To nie to, przy tych opoznieniach na diodzie to duzo czasu musi minac aby wypelnic ramke. Dioda mruga 8 razy i mam STOP, komunikat zdebugera blad dostepu do memory. A u Ciebie to pracuje ?
Odpowiedz
Witam,

Kod:
*((uint32_t *)ptr++) = 0xFFFFFFFF;    //pixel do ramki obrazu

No ok, ale gdzie tu masz jakąś kontrolę ilości zapisywanych danych do ramki obrazu ?

W takiej formie
Kod:
while (1)

pętla będzie się kręcić w nieskończoność, i wartość 0xFFFFFFFF będzie zapisywana do kolejnych komórek pamięci.

A stm się wiesza, bo pętla zaczyna zapisywać tam gdzie nie powinna..

I jeszcze jedna mała uwaga !!!!

Pamiętajcie, że ten ( i nie tylko ten) model stm-a ma mały obszar PAMIĘCI JEDNOKROTNEGO ZAPISU !!!!!!
Więc uważajcie z takimi "kocimi" wynalazkami w kodzie !!!!


73 Paweł
Odpowiedz
Nie wiem jakie masz błędy. Pokaż logi.
Odpowiedz
Macie racje, ze brakuje ograniczenia ale ten zapis dalem tylko tak testowo.
ptr jest ustawiany na poczatek ramki, dioda mruga wolno wiec nie ma ryzyka wyjscia poza sdram. Dobra, wyrzucilem ten zapis w petli i dalem zerowanie ramki obrazu przed petla. Efek taki sam, stm wisi. Co jest nie tak ?

Nie wiem o jakie logi pytasz, kod nie wystarczy ?
Co to jest pamiec jednokrotnego zapisu, to takie OTP jak w starych procesorach?


Załączone pliki
.zip   main_c.zip (Rozmiar: 1.15 KB / Pobrań: 703)
Odpowiedz
Nie wiem co używasz do debugowania. Zazwyczaj jest jakiś terminal co wypluwa błędy i informacje. Poza tym nie jestem pewien ale chyba procek twój chodzi na 168MHz a mój przykład jest na 180. Trzeba podbić mu napięcie (w rejestrach) i wykręcić na maksa. Poza tym nie wiem jaki chcesz efekt jak 0xFFFFFFFF to jest biały obraz czyli taki sam jak tło. Daj 0xFF000000 to powinien zrobić się czarny.
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek: 2 gości