Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

Munieq 24 Feb 2015 18:07 1038 3
  • #1
    Munieq
    Level 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:

    Code: c
    Log in, to see the code


    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?
  • #3
    Munieq
    Level 14  
    szczywronek wrote:
    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ń:

    Code: C
    Log in, to see the code


    oraz

    Code: C
    Log in, to see the code


    Obie funkcje wywoływane podczas inicjalizacji VCP.
  • #4
    szczywronek
    Level 27  
    Munieq wrote:
    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" :)