Nie można zaprogramować niestandardowej płytki STM32


9

Zaprojektowałem prostą płytę STM32. Poniżej znajdują się zdjęcia schematu i układu PCB:

Schematyczny:
wprowadź opis zdjęcia tutaj

Układ PCB: wprowadź opis zdjęcia tutaj

Układ PCB z podświetleniem VDD: wprowadź opis zdjęcia tutaj

Układ PCB z podświetlonym GND: wprowadź opis zdjęcia tutaj

Na powyższych zdjęciach pokazano tylko części tego projektu, które są istotne dla mojego pytania.

Mój problem polega na tym: próbowałem użyć wbudowanego ST-Link na płycie STM32 Discovery do zaprogramowania tej niestandardowej płyty, ale nie udało mi się jeszcze. Aplikacja ST-Link Utility na PC może rozpoznać programator, ale nie może wykryć docelowego MCU. Komunikaty o błędach, które otrzymałem to: „Target not connected” i „ST-Link USB Communication Error”.

Oto kilka powiązanych faktów na temat mojego problemu:

  • Płytka Discovery STM32 działa dobrze: mogę użyć jej wbudowanego ST-Link do zaprogramowania MCU na pokładzie STM32. To jest wporządku.
  • Moduł MCU STM32 został przylutowany z prawidłową orientacją na płycie niestandardowej. Sprawdziłem to dwa razy.
  • Sprawdziłem ślady VDD i SWD. Są dobrze połączone (bez problemu z lutowaniem). Pin Boot0 ma wartość 0 V. Pin NRST ma napięcie 3,3 V.
  • Kabel SWD jest krótki, ma tylko 7-8 cm długości.
  • STM32 na mojej niestandardowej płycie jest tego samego typu co ten na płycie Discovery.
  • Postępowałem zgodnie z instrukcjami w instrukcji STM32 Discovery Board, jak używać Discovery Board do programowania zewnętrznego MCU STM32. Mówiąc ściślej, usunąłem 2 zworki CN3, a następnie podłączyłem płytki zgodnie z poniższą tabelą: wprowadź opis zdjęcia tutaj

  • Usunąłem również mostek lutowniczy SB11 na płycie Discovery Board (aby pin NRST mógł działać poprawnie).

  • Próbowałem zarówno aplikacji ST-Link Utility, jak i Keil. Otrzymane komunikaty o błędach są takie same.
  • Na początku nie podłączyłem pinu 6 w powyższej tabeli (SWO), ponieważ o ile wiem, nie jest to konieczne. Jednak po tym również to połączyłem, ale sprawy nadal nie działały.
  • Dodałem również czapkę 100nF z pinu NRST do GND, a następnie 100k rezystor podciągający z tego pinu do VDD. Problem nadal pozostaje.
  • Próbowałem także użyć trybu „Połącz w trakcie resetowania” programu ST-Link Utility. Nie ma też szczęścia.

Podejrzewam, że może być coś nie tak z projektem, ale nie jestem pewien. Pomóż mi rozwiązać problem.

Dziękuję Ci bardzo :)


O ile pamiętam, musisz zasilać zarówno st-link, jak i swoją niestandardową kartę. 3,3 V w złączu SWD niestandardowej płytki musi zapewnić 3,3 V, aby st-link mógł je wykryć.
davidrojas

@davidrojas: Dziękujemy za odpowiedź. Cóż, obecnie zasilam ST-Link przez port USB z mojego komputera. Niestandardowa płytka STM32 jest zasilana zewnętrznym, oddzielnym napięciem 3,3 V. Jednak uziemienie tych 2 płyt jest już połączone (jak w powyższej tabeli). Również 3.3V z mojej niestandardowej płyty jest podłączony do VDD_TARGET na ST-Link. Myślisz, że to wystarczy?
user3286500,

Tak powinno wystarczyć. Inną kwestią może być długość i układ linii SWDIO i SWCLK, z tego powodu miałem problemy z przerywanym połączeniem w przeszłości. Muszą być jak najkrótsze. Spróbuj także obniżyć prędkość SWD.
davidrojas

Obniżyłem prędkość SWD z domyślnego 1,8 MHz do poniżej 400 kHz, ale nadal nie powiodło się. Jeśli chodzi o długość kabla, w moim ustawieniu całkowita długość połączenia SWD (od ST-Link do docelowego STM32) wynosi około 12-13 cm. Czy to nadal mieści się w limicie?
user3286500,

1
Czy zauważyłeś, że ziemia zalana pod mikroukładem jest fizycznie izolowana i właściwie nie jest podłączona do żadnego z pinów uziemienia? Rzeczywiste połączenia między stykami uziemienia przebiegają krętymi ścieżkami na zewnątrz układu, a niektóre z nich mogą być właściwie odizolowane. Musisz dostosować swoje prześwity, aby zalewanie gruntu nie miało izolowanych wysp, a to pomoże upewnić się, że wszystkie styki uziemienia chipu są znacznie bliżej tego samego potencjału.
Dave Tweed,

Odpowiedzi:


5

Dziękuję za wspaniałe komentarze. Dzięki nim byłem pewien, że mój projekt jest wolny od błędów. Dlatego skoncentrowałem się na poszukiwaniu błędów w sprzęcie. I znalazłem błąd! To jest błąd lutowania.

Znalazłem ten błąd po wykonaniu tej instrukcji: „Użyj multimetru i przetestuj wszystkie połączenia pod kątem zwarć lub braku połączenia. Pamiętaj, aby delikatnie dotykać pinów / padów / czegokolwiek, ponieważ jeśli mocno naciskasz sondę, możesz” naprawić „połączenie tymczasowo (na przykład wpychasz pin układu scalonego do śladu na płytce drukowanej, a test jest OK, ale jak tylko go puścisz, pin ponownie się zgina)”. Oryginalny post jest tutaj .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.