Skocz do zawartości

Oled nie dziala podczas debugowania


danielll

Pomocna odpowiedź

Probuje napisać obslugę wyświetlacza poprzez DMA i przerwania. Ponieważ z jakiegoś powodu mi nie działa to postanowilem w ramach testu napisać taką pętle i okazało się że wyswietlacz reaguje ale dopiero po zatrzymaniu debugowania. Jaka może być tego przyczyna? Byc moze właśnie przez to program mi wczesniej nie działał mimo ze przerwania włączały sie prawidlowo.

void SSD1306::loop(){
    for (int i=0; i<8 ; i++){
        lineCommands[0]=0xB0 + counter;
        lineCommands[1]=0x00;
        lineCommands[2]=0x10;
        status=1;
        ssd1306_WriteCommand();
        HAL_Delay(1000);
        HAL_GPIO_WritePin(SSD1306_CS_Port, SSD1306_CS_Pin, GPIO_PIN_SET); // un-select OLED
        HAL_Delay(1000);
        status=0;
        counter+=1;
        if (counter==8)
            counter=0;
        ssd1306_WriteData();
        HAL_Delay(1000);
        HAL_GPIO_WritePin(SSD1306_CS_Port, SSD1306_CS_Pin, GPIO_PIN_SET); // un-select OLED
        HAL_Delay(1000);
        ssd1306_Fill(White);
    }
    ssd1306_Reset();
}

W funkcjach ssd1306_Write znajduje sie odpowiednia zmiana pinu DC na zapis komend i danych oraz rozpoczecie odczytu DMA dla stworzonych tablic.

Edytowano przez danielll
Link do komentarza
Share on other sites

A może zacznij od początku: co to za mikrokontroler, co to za wyświetlacz, w czym ty to programujesz, co to za "debugowanie" i tak dalej.

Wklejasz jakiś fragment kodu, ale ani nie wiemy jak go wołasz w swoim programie, ani jak są zaimplementowane te funkcje które on wywołuje.

Nie oczekujesz od nas czasem zbyt wiele?

Link do komentarza
Share on other sites

Mikrokontroler STM32F303re, wyswietlacz SSD1306, programuje w Atollicu i debuguje przez ST-Link.  Najpierw wysylam przez DMA do rejestru wartości inicjujące a nastepnię odpalam tą pętlę która wstawiłem. Tak jak napisałem w metodzie ssd1306_WriteCommand znajduje sie jedynie odpowiednia zmiana pinu DC na zapis komend oraz wysłanie ich przez DMA po SPI i w metodzie ssd1306_WriteData rowniez zmiana DC na zapis danych i wysłanie tablicy danych ustawionej metodą fill (wypelnia buffor danym kolorem), poprzez DMA. 

Dma ustawilem w trybie normal, jednorazowo wysyłane. Pętla ustawiona na 8 razy bo musze wysłąc każdy wiersz oddzielnie. 

Wczoraj rano odpaliłem znowu ten sam program i juz chodził też na debugowaniu więc podejrzewam że przyczyną był jeden breakpoint (ktorego z jakiegoś powodu wtedy nie mogłem usunąć) i on pewnie przerywając transmisje DMA powodował nieprawidłowy przesył. Moje podejrzenia są słuszne?

 

Link do komentarza
Share on other sites

Jeśli ten breakpoint był np. w funkcji inicjalizującej wyświetlacz, albo w trakcie przesyłania danych do wyświetlacza (chyba, że napisałeś do tego wyjątku odpowiednią funkcję, żeby zaczął inicjalizację oraz przesyłanie danych od nowa) to jak najbardziej jest to możliwe. Nawet zwykłego LCD 16x2 jak podczas inicjalizacji zrobisz breakpoint, to nie uruchomi się on. 🙂 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.