Skocz do zawartości

STM32 virtualny uart czy takie połączenie zadziała ?


kp5kp5

Pomocna odpowiedź

Witam mam taki oto problem potrzebuje spiąć stm32 poprzez jego uart vcp ze zwykłym uartem drugiego mikrokontrolera , stm32 wykonuje kod z pc poprzez virtualny port com a ja chcę przenieść te komunikacje do mikrokontrolera który będzie gadał z stm32 poprzez ten sam interfejs czy to jest wogóle możliwe ? . Czy taki port stm32 zostanie odebrany jak zwykły uart ? 

Pozdrawiam.

Link do komentarza
Share on other sites

2 godziny temu, FlyingDutch napisał:

Cześć,

jeśli poprawnie ustawisz parametry obu UART'ów i przeniesiesz poprawnie kod z PC do mikrokontrolera to będzie to działać poprawnie.

Pozdrawiam

Ok czyli z Twojej odpowiedzi wynika że stm32 usb cdc działając jako virtualny port uart zostanie odebrany przez pierwszy mikrokontroler jako uart ? 

Link do komentarza
Share on other sites

22 minuty temu, kp5kp5 napisał:

Ok czyli z Twojej odpowiedzi wynika że stm32 usb cdc działając jako virtualny port uart zostanie odebrany przez pierwszy mikrokontroler jako uart ? 

Zależy jak to zaimplementujesz. Ogólnie Virtual COM Port wykorzystuje magistralę USB by komunikować się z STM32. Do tego w STM32 musisz mieć też wyprowadzony dodatkowy UART do drugiego mikrokontrolera i w momencie odebrania danych poprzez CDC w przerwaniu udostępnianym przez Middleware USB_Device przekopiować dane otrzymane przez CDC do UART'a, z którym komunikuje się STM32. Tak samo przy odebraniu danych z UART'a przekopiować je na CDC. Oczywiście będzie też ryzyko, że przerwanie wystąpi w momencie transmisji innego pakietu danych, więc w przypadku gdy dane są pakietowane na czas transmisji należy zabezpieczyć się przed przerwaniami. Najlepszym rozwiązaniem jest zastosowanie bufora kolejkowego (teoretycznie można też wyłączyć przerwania, ale czasem może to spowodować zawieszenie się mikrokontrolera np. przy użyciu HAL_Delay, gdy przerwania są wyłączone).

  • Pomogłeś! 1
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

Wydaje mi się, że w niniejszym wątku nastąpiło zupełne pomieszanie pojęć.

UART zupełnie co innego niż USB CDC i nie można bezpośrednio ich ze sobą łączyć, to nie zadziała.

W przypadku płytek Nucleo mamy do czynienia z dwoma układami STM32. Oznaczenie płytki pochodzi od głównego układu, czyli powedzmy Nucleo-L476 oznacza, że głównym układem jest STM32L476.

Drugi STM32 pełni funkcję programatora oraz konwertera UART<->USB. 

Czyli główny układ, ten który używamy podczas pisania programu komunikuje się przez UART z drugim, na którym działa program dostarczony przez producenta i ten układ łączy się z komputerem PC poprzez USB.

Jeśli chcemy główny układ podłączyć do innego STM32 to musimy najpierw odłączyć programator - można to zrobić za pomocą zworek na płytce. Następnie można używać UART do bezpośredniej komunikacji - o ile rozumiem tego dotyczyła odpowiedź kolegi @FlyingDutch

Natomiast podłączenie USB z programatora do UART-a innego mikrokontrolera nie zadziała - potrzebny jest kolejny konwerter, tym razem z USB-host na UART. Można oczywiście wykorzystać USB tego dodatkowego układu w trybie host, ale w pytaniu było czy można podłączyć do UART.

Więc moim zdaniem odpowiedź jest - nie, nie można wyjścia USB z programatora podłączyć bezpośrednio do UART-a.

Edytowano przez Elvis
  • Pomogłeś! 1
Link do komentarza
Share on other sites

3 godziny temu, Elvis napisał:

Wydaje mi się, że w niniejszym wątku nastąpiło zupełne pomieszanie pojęć.

UART zupełnie co innego niż USB CDC i nie można bezpośrednio ich ze sobą łączyć, to nie zadziała.

W przypadku płytek Nucleo mamy do czynienia z dwoma układami STM32. Oznaczenie płytki pochodzi od głównego układu, czyli powedzmy Nucleo-L476 oznacza, że głównym układem jest STM32L476.

Drugi STM32 pełni funkcję programatora oraz konwertera UART<->USB. 

Czyli główny układ, ten który używamy podczas pisania programu komunikuje się przez UART z drugim, na którym działa program dostarczony przez producenta i ten układ łączy się z komputerem PC poprzez USB.

Jeśli chcemy główny układ podłączyć do innego STM32 to musimy najpierw odłączyć programator - można to zrobić za pomocą zworek na płytce. Następnie można używać UART do bezpośredniej komunikacji - o ile rozumiem tego dotyczyła odpowiedź kolegi @FlyingDutch

Natomiast podłączenie USB z programatora do UART-a innego mikrokontrolera nie zadziała - potrzebny jest kolejny konwerter, tym razem z USB-host na UART. Można oczywiście wykorzystać USB tego dodatkowego układu w trybie host, ale w pytaniu było czy można podłączyć do UART.

Więc moim zdaniem odpowiedź jest - nie, nie można wyjścia USB z programatora podłączyć bezpośrednio do UART-a.

Cytat

Natomiast podłączenie USB z programatora do UART-a innego mikrokontrolera nie zadziała - potrzebny jest kolejny konwerter, tym razem z USB-host na UART. Można oczywiście wykorzystać USB tego dodatkowego układu w trybie host, ale w pytaniu było czy można podłączyć do UART.

Aaa to teraz rozumiem :) czyli na pałe mogę zrobić tak jak napisałeś i to zadziała też tak wyżej podał kolega @flying__dutch . Tak oczywiście takie proste rozwiązanie spełni swoje zadanie w moim przypadku i wykorzystam je dlatego że modyfikacja kodu stm32 w ten sposób by zadziałał przez uart będzie zapewne dosyć skomplikowana. 

Link do komentarza
Share on other sites

19 godzin temu, Elvis napisał:

Wydaje mi się, że w niniejszym wątku nastąpiło zupełne pomieszanie pojęć.

UART zupełnie co innego niż USB CDC i nie można bezpośrednio ich ze sobą łączyć, to nie zadziała.

Więc moim zdaniem odpowiedź jest - nie, nie można wyjścia USB z programatora podłączyć bezpośrednio do UART-a.

Cześć @Elvis,

przyznaję pomyliłem się.

Pozdrawiam

Link do komentarza
Share on other sites

Nie wiem czy dobrze zrozumiałem:

Chcesz połączyć dwie płytki bazujące na STM32 przez USB w trybie CDC?

Jeżeli tak, to jest to możliwe. Pierwszą płytę konfigurujesz jako Device USB w trybie CDC, a drugą jako host USB w trybie CDC. Obie spinasz kablem USB. Jednak oprogramowanie tego nie będzie łatwe.

Osobiście jednak wybrałbym bezpośrednią komunikację przez UART/USART. Jeżeli masz dostęp do kodu na obu płytkach to taka konwersja nie powinna być kłopotliwa. Jeżeli urządzenie działające w trybie USB device nie jest twoje i nie masz dostępu do kodu to faktycznie chyba nie masz innej opcji.

Pozdrawiam,
Marek

 

Link do komentarza
Share on other sites

Dnia 10.12.2024 o 12:19, MR1979 napisał:

Nie wiem czy dobrze zrozumiałem:

Chcesz połączyć dwie płytki bazujące na STM32 przez USB w trybie CDC?

Jeżeli tak, to jest to możliwe. Pierwszą płytę konfigurujesz jako Device USB w trybie CDC, a drugą jako host USB w trybie CDC. Obie spinasz kablem USB. Jednak oprogramowanie tego nie będzie łatwe.

Osobiście jednak wybrałbym bezpośrednią komunikację przez UART/USART. Jeżeli masz dostęp do kodu na obu płytkach to taka konwersja nie powinna być kłopotliwa. Jeżeli urządzenie działające w trybie USB device nie jest twoje i nie masz dostępu do kodu to faktycznie chyba nie masz innej opcji.

Pozdrawiam,
Marek

 

Troche inaczej , posiadam kod stm32 który pracuje z usb_cdc tylko ktoś inny go pisał  i chcę to spiąć z raspberry pico 2 lub avr128db poprzez uart więc zastosowanie które podał wyżej @Elvis powinno zadziałać tylko jak zrozumiałem pomiędzy nimi musiałbym zastosować konwerter ft232rl. Nie programuje w C biegle tylko czasami również nie mam zamiaru bawić się w jakieś micropythony czy arduino które mnie niczego nie nauczą chyba prościej w C będzie mi zaprogramować uart w rpi czy avr128db niż usb_cdc.

Link do komentarza
Share on other sites

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.