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

STM32F3 Discovery - Nagła utrata komunikacji

darkmiki 22 Gru 2013 17:46 2019 12
  • #1 22 Gru 2013 17:46
    darkmiki
    Poziom 5  

    Cześć,
    Jakiś czas temu kupiłem płytkę Discovery w związku z projektem na studia. Jednym z elementów tego projektu miała być komunikacja przez UART, tak więc napisałem program realizujący to zadanie i podłączyłem odpowiednie piny płytki STM (w moim przypadku był to UART2, więc piny PA2 i PA3) do pinów TX/RX na przetworniku USB/UART.

    Wyczytałem też na pewnej stronie, że powinno się połączyć masy, czego nie omieszkałem zrobić.

    Po paru godzinach bezowocnych prób zrobiłem sobie przerwę i poszedłem do coś zjeść. Całość zostawiłem połączoną tak jak była. Kiedy wróciłem, napisałem nową wersję programu, ale kiedy chciałem ją wgrać pojawił się komunikat NO ST-LINK DETECTED. Zresztą płytka jakby w ogóle przestałą działać, bo wgrany wcześniej program także się nie wykonywał. Żadnej łączności przez ST-LINK Utility, STLink VP, a reinstalacja sterowników nic nie dała. Na wszystkich komputerach wywala komunikat, że urządzenie USB ma awarię i system klasyfikuje je jako "unknown device".

    Dziwne jest to, że jeśli połączę się przez USB na wejściu USB-User to stary program się wykonuje. Generalnie cała sprawa wygląda tak, jakby przy połączeniu przez port USB ST-LINK płytka dostawała za małe napięcie i dlatego nei działała. NA wyjściach 3V i 5V zmierzyłem napięcie 2,5V.

    Macie jakiś pomysł co się mogło stać? I ewentualnie czy da się to naprawić? Będę wdzięczny za pomoc.

    0 12
  • #2 22 Gru 2013 18:07
    BlueDraco
    Specjalista - Mikrokontrolery

    Schemat! Jakie wyjście ma moduł USB-UART, którego używasz - logiczne czy RS232?

    0
  • #3 22 Gru 2013 18:26
    darkmiki
    Poziom 5  

    STM32F3 Discovery - Nagła utrata komunikacji

    To jest schemat połączenia między płytką a konwerterem. Co do konwertera to nie jestem pewien o co chodzi. Mam osobny moduł, który podłączam do USB. Ma tylko piny VCC, GND, TX i RX. To chyba znaczy, że RS232? Warto też nadmienić, że na wyjściu daje 3,3V.

    0
  • #4 22 Gru 2013 20:17
    szczywronek
    Poziom 27  

    darkmiki chodzi o poziomy napięć. Cytat z wikipedii (artykuł "RS-232"):

    Cytat:
    Poziom napięcia wyjściowego natomiast może przyjmować wartości -12V, -10V, +10V, +12V

    Jeśli "przejściówka" podałaby 12V na stm'a to z dużym prawdopodobieństwem płytka zyskała by nowe możliwości - można by zrobić "discovery" wnętrza mikrokontrolera. Ale skoro piszesz, że na wyjściu jest poziom logiczny 3,3V to ok.

    Coś tu nie pasuje:
    Cytat:
    Ma tylko piny VCC, GND, TX i RX.

    a moduł na schemacie ma trochę więcej...

    0
  • #5 22 Gru 2013 20:58
    darkmiki
    Poziom 5  

    Bo ten schemat jest ze strony, która opisywała tutorial do obsługi USART na Discovery. Moja przejściówka różni się tylko tym, że ma mniej wyjść (okrojona wersja przejściówki ze schematu) i niczym więcej. Jeśli chodzi o napięcie na wyjściach, jest ono równe dokładnie 3.45V w stanie wysokim

    0
  • #6 22 Gru 2013 21:18
    BlueDraco
    Specjalista - Mikrokontrolery

    Bez schematu nie uzyskasz pomocy. Nie wiemy nawet, czy połączyłeś TX uC z Rx interfejsu.

    Podłącz kolejno samą płytkę DISCOVERY do dwóch różnych portów USB komputera i porównaj zachowanie. Potem zrób to samo z samym modułem USB-UART.

    Mogłeś upalić port USB w komputerze.

    0
  • #7 22 Gru 2013 21:36
    darkmiki
    Poziom 5  

    Okej, uaktualniłem schemat. Przy czym kolejności podpięcia pinów nie jestem pewien, ponieważ kiedy mi nie działała komunikacja to zamieniałem kolejnością łączenia PA2/PA3 z TX/RX . Czy to mógł być problem? Jeśli chodzi o porty USB to działają oba. STM zachowuje się tak samo przy obu portach, natomiast konwerter działa poprawnie na obu.

    0
  • #8 22 Gru 2013 21:49
    szczywronek
    Poziom 27  

    Ok. Podsumowując:
    - jak się podpinasz do złącza usb-user to discovery jakoś tam działa (pali się LED1?)
    - po przepięciu przewodu do złącza usb-stlink generalnie "trup"

    Jeśli się zgadza powyższe i płytka to "stm32f3discovery" to strzelałbym, że szlak trafił diodę D2 (BAT60). Tylko uprzedzam, że płytki na oczy nie widziałem - opieram się na schemacie ze strony st.

    0
  • #9 22 Gru 2013 22:22
    darkmiki
    Poziom 5  

    Wygląda to dokładnie tak. Kiedy:
    - jest podłączona przez USB ST-LINK to LD1(PWR) się słabo świeci i nic więcej się nie dzieje
    -jest podłączona przez USB USER to LD1(PWR) świeci się mocniej, oprócz tego miga LD2(COM) i wykonuje się program

    Ma to sens. Ale czemu tak się stało? Czy podłączenie RX do RX i TX do TX mogło poskutkować uszkodzeniem jakichś elementów?

    Dodano po 25 [minuty]:

    I jak można sprawdzić np multimetrem czy to rzeczywiście ta dioda?

    0
  • Pomocny post
    #10 23 Gru 2013 00:10
    szczywronek
    Poziom 27  

    O przyczynach się nie wypowiadam bo nie chcę głupot nagadać ;) Niech ktoś mądrzejszy kombinuje.

    Co do diody: bazuję na informacjach ze strony st.

    Dioda D2 jest wpięta szeregowo pomiędzy linię +5V gniazda usb-stlink a szynę 5V na płytce. Strzelam, że jest spalona i przy zasilaniu podpiętym pod to gniazdo, płytka jest "pasożytniczo" zasilana z linii danych.

    Co do sprawdzenia (płytka odłączona od wszystkiego, w szczególności usb):
    - najpierw organoleptycznie - dioda jest tuż obok złącza usb-stlink - obejrzyj ją - może widoczne są jakieś uszkodzenia typu "wybuchła", odlutowała się etc... ;)
    - jak nic nie widać to multimetr -> test diody (nie mylić z pomiarem rezystancji) - w jedną stronę powinna przewodzić, w drugą nie
    - jeśli powyższy test dioda zaliczy to podłącz zasilanie do tego portu, multimetr ustaw na pomiar napięcia i zamierz względem masy (np. metalowej części złącza usb) napięcie przed i za diodą - powinno być z grubsza 5V po obu stronach

    0
  • #11 23 Gru 2013 01:40
    darkmiki
    Poziom 5  

    Zmierzyłem i wyszło tak:
    -Przy podłaczeniu do USB USER - na diodach d4, d5 było mniej więcej 5v
    -Przy podłaczeniu do USB ST-LINK - na diodzie D2 2,5V

    Co do testu diody to nie za bardzo wiem jak to robić. Tak czy siak zgodnie ze spisem ze strony producenta wszystkie te diody są takie same, więc na D2 też powinno być takie samo napięcie, tak...?

    A teraz to już w ogóle ta płytka świruje bo USB USER też przestał działać... o_O

    0
  • Pomocny post
    #12 23 Gru 2013 10:34
    szczywronek
    Poziom 27  

    Co rozumiesz przez "na diodzie D2 2,5V"? To jest napięcie między którąś końcówką a masą czy między anodą a katodą?

    Co do sprawdzania diody - nawet się nie przyznawaj ;) - doczytaj w google'ach.

    Jeśli sprawne są: port usb w komputerze, przewód usb, gniazdo usb na płytce i żadna ścieżka nie jest przerwana/spalona to na anodzie diody D2 (anoda jest od strony złącza usb ;) ) powinno być około 5V względem masy. Jeśli nie ma to: albo któryś z wymienionych wcześniej elementów zawiódł albo płytka ciągnie za dużo prądu i kontroler usb w komputerze odłącza zasilanie. Ta druga opcja wydaje się jednak mało prawdopodobna, bo to samo działoby się przy obu złączach - a drugie złącze jak wcześniej pisałeś działało.

    Dalej - jeśli do wspomnianej anody diody dochodzi 5V to (jeśli jest ona sprawna) również na jej katodzie powinno być zbliżone napięcie (coś w okolicach 4,5V, względem masy).
    Jeśli na anodzie jest 5V a na katodzie jakieś 2,5V to zdecydowanie ta dioda umarła.

    0
  • #13 23 Gru 2013 19:26
    darkmiki
    Poziom 5  

    Wszystko się wyjaśniło... problemem była rzeczywiście dioda D2, która działa jak bezpiecznik. Mam metalową obudowę od komputera i to na niej kładłem płytkę. Zrobiło się zwarcie i cóż...:P Na szczęście wystarczyło wymienić diodkę i szafa gra. Wielkie dzięki za wcześniejszą sugestię z diodą, to bardzo przyspieszyło sprawę!:)

    Teraz mam problem z wysyłaniem danych przez USART. Ma ktoś z was doświadczenia z tym związane? Poniżej zamieszczam fragment kodu:

    Cytat:
    //UStawianie wyjsc PB6 i PB7 w tryb alternatywny jako push-pull i no pull up/down;
    RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
    GPIOB->MODER &= ( GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1 ) ;
    GPIOB->AFR[0] =0x77000000;
    GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6 | GPIO_OSPEEDER_OSPEEDR7;
    GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;

    GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR7;


    /*-----------------------------------------------------------------*/
    /* Konfigurcja portu szeregowego USART1 na pinach PB6(TX) PB7(RX) */
    /*-----------------------------------------------------------------*/
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

    USART1->BRR = ( 72000000 / 115200);
    USART1->CR1 |= USART_CR1_TE | USART_CR1_RE;
    USART1->CR1 |= USART_CR1_UE;

    Kiedy wysyłam dane z PB6 na pin RX na konwerterze na hyperterminalu nic mi się nie wyświetla. Podejrzewam że tak problem z BaudRate, ale nie za bardzo wiem jak go rozwiązać (z tego co wiem to trzeba podzielić częst. taktowania przez wartość BaudRate'u)

    0