Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32][C] - USB VCP - zawieszanie programu

24 Lut 2015 18:07 894 3
  • Poziom 14  
    Witajcie,

    Mam problem z uC STM32F103RB, na którym próbuję implementować tryb VirtualComport_Loopback z biblioteki STM32 USB-FS-Device library.
    Sam przykładowy projekt działa, zarówno w środowisku TrueSTUDIO, jak i przeportowany do CooCox, wszystko jest fajnie, dopóki kabel USB jest wpięty do PC.

    Pętla główna:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Podłączenie (płytka customowa):

    [STM32][C] - USB VCP - zawieszanie programu

    Kod powyżej ma za zadanie zainicjować USB oraz zmieniać stan wyjścia z LEDem w pętli.

    Podciąganie linii D+ jest na sztywno do +3V3.

    Gdy przewód USB jest wpięty do PC, wszystko jest ok, otrzymuję przebieg prostokątny na wyjściu PC15.
    Gdy odepnę przewód wtedy pętla główna się zatrzymuje (wyjście nie zmienia stanu), brak jest możliwości debugowania oraz programowania z soft resetem. Gdy z powrotem podepnę przewód i się zenumeruje, pętla rusza dalej (więc raczej nie wpada w Hard_fault).

    Podejrzewam, że wyzwala się wtedy w kółko jakieś przerwanie, tylko pytanie jak je namierzyć bez debuggera? Miał ktoś kiedyś podobny przypadek z tą biblioteką?

    I poboczne pytanie: jaki jest cel sterowania podciąganiem linii D+? Chodzi o walidację końcową urządzenia z USB, która wymaga brak napięcia na pinach przy podłączaniu urządzenia?
  • Poziom 14  
    szczywronek napisał:
    Nie jestem pewien, ale coś mi chodzi po głowie, że ten przykład od ST usypiał procka przy braku transmisji - to by tłumaczyło czemu wszystko "umiera".


    Zgadza się - przykład "Joystick mouse demo" wpędza procesor w uśpienie. Przykłady, które testowałem, czyli:
    Custom HID demo
    Virtual COM port demo
    VirtualComport_Loopback
    nie mają nigdzie śladu usypiania.

    Doszedłem, że czary dzieją się po inicie przerwań:

    Kod: C
    Zaloguj się, aby zobaczyć kod


    oraz

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Obie funkcje wywoływane podczas inicjalizacji VCP.
  • Poziom 27  
    Munieq napisał:
    STM32 USB-FS-Device library.
    To jest to cudo: klik?

    Mogę się mylić, ale dalej będę się upierał że procek idzie spać. W pliku usb_pwr.c masz funkcję void Suspend(void) - profilaktycznie unieszkodliwiłbym jej, na czas testów, te kawałki które odpowiadają za "sleep" procesora.

    ----

    Co do poszukiwania przerwania - wydaje mi się, że najłatwiej byłoby je namierzyć umieszczając w procedurze obsługi "machanie pinem" :)