Skocz do zawartości

Kurs STM32 F4 - #7 - Komunikacja przez UART


Pomocna odpowiedź

Hej, kurs - BOMBA 😉

Mam małą prośbę, może ktoś podrzucić mi ciało funkcji UART_DMATransmitCplt z biblioteki stm32f4xx_hal_uart.c ?

Przerabiam cały kurs na innej płytce i właśnie w tej bibliotece w podaj funkcji musiałem coś przerobić, chciałbym zobaczyć jak jest ona zrealizowana w STM32f4 🙂

z góry dziękuję 🙂

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

Męczyłem się z tym dzisiaj cały dzień i noc... bo już 4 nad ranem, więc zwracam się do was z nadzieją, że pomożecie.

Zadanie jest proste chce za pomocą UART wysłać komunikaty MIDI.

Na arduino nie było żadnego problemu np.:

//send MIDI message
void MIDImessage(byte command, byte data1, byte data2) {
 Serial.write(command);
 Serial.write(data1);
 Serial.write(data2);
}

Jeżeli chodzi o stm, skonfigurowałem wszystko w cube jak należy i owszem wysyła --- to co w kursie wysyła ale nie umiem sobie poradzić z tym, żeby wysłać tak jak na arduino 3 liczby najlepiej w hex albo binarnie i żeby one w pożądanej postaci dotarły i wyszły z uart.

Słowem wysyłam np 144 dociera całkiem co innego. Próbowałem już różnych rzeczy ale bez skutku...

Wybaczcie chaotyczną wypowiedź, bardzo proszę o pomoc. 🙂

Jeśli chodzi o rozwiązanie problemu:

https://www.elektroda.pl/rtvforum/viewtopic.php?p=16811552#16811552

Wybaczcie, że obce forum ale... działa 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Cześć.

Mam problem z tym zadaniem. Nie dość, że po zmianie tekstu i wgraniu programu do mikrokontrolera pojawia mi się błąd w 71 linijce, który jednak po ponownym skompilowaniu i wgraniu znika:

size = sprintf(data, "Liczba wyslanych wiadomosci: %d.\n\r", cnt);

To na domiar złego jak wejdę w program Realterm to pojawia mi się coś takiego:

Jak można to naprawić? Co robię źle?

Nie wiem czy to ma znaczenie, ale u mnie dioda nie mruga z częstotliwością 1Hz, chociaż, według mnie ustawiłem poprawnie wszystkie wartości:

Pozdrawiam i z góry dziękuję za pomoc.

EDIT:

No to tak, wstyd się oczywiście przyznać, ale wszystko to było przyczyną tego, że przy konfiguracji zegara, nie zmieniłem Input Frequency z 25 na 8. Po tym zabiegu wszystko zadziałało. Lecz nadal pojawia się "Warning" przy linijce z sprintf'em.

  • Lubię! 1
Link do komentarza
Share on other sites

Witam, nie mogę zmusić do działania odbierania danych przez UART, co więcej gdy wgrywam kod z tutoriala nie chce sie on zbuildować. Wyskakuje taki błąd:
 

No rule to make target '.../04_UART_Receive_Multiple_Bytes/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c', needed by 'Drivers/CMSIS/system_stm32f4xx.o'.  Stop.

Nie wiem co jest tego przyczyną. Gdy szukałem tego pliku nie mogłem go w ogóle znaleźć ale w innych projektach też go nie mam a mogę je zbuildować. Co więcej taki błąd zazwyczaj mi wyskakiwał gdy miałem w nazwie plików jakiś polski znam/spację ale wszystko usunąłem a błąd pozostał.

Link do komentarza
Share on other sites

@coolwilk, standardowe pytania:

  1. Jaka jest pełna ścieżka do projektu?
  2. Czy poprzednie części kursu udało się przejść bez problemu i używasz identycznego sprzętu?
  3. Czy wszystkie narzędzia masz ustawione tak samo jak było to opisane w kursie?
  4. Czy próbowałeś wykonać ten projekt raz jeszcze od początku (aby uniknąć przypadkowych błędów)?
Link do komentarza
Share on other sites

Dnia 10.11.2018 o 23:16, Treker napisał:

@coolwilk, standardowe pytania:

  1. Jaka jest pełna ścieżka do projektu?
  2. Czy poprzednie części kursu udało się przejść bez problemu i używasz identycznego sprzętu?
  3. Czy wszystkie narzędzia masz ustawione tak samo jak było to opisane w kursie?
  4. Czy próbowałeś wykonać ten projekt raz jeszcze od początku (aby uniknąć przypadkowych błędów)?

1. W pełnej ścieżce nie było ani spacji ani wolnych znaków. Była ona poprawna.

2. Nie bez problemów ale wszystkie rozwiązałem, używam zalecanego sprzętu do tego kursu

3. Tak jest, wszystko jest ustawione tak samo ALE nie robiłem remappingu pinów.

4. Tak

 

Problem rozwiązałem (nie ten dotyczący buildowania się projektu z artykułu). Otóż wszystko działa po zrobieniu remappingu. Dziwi mnie to bardzo. Czy sugeruje to, że te podstawowe piny wyjściowe dla UART są wadliwe (program jest taki sam, jedyna różnica to remapping)?

Link do komentarza
Share on other sites

Cześć! Pochwale się Wam swoim wybitnym osiągnięciem.

Funkcja atoi() w moim przypadku nie dawała do końca oczekiwanych rezultatów. Podczas wysłania liczby program zachowywał się jak należy, lecz gdy wysłany został znak informacją zwrotną było STOP. Wystarczy użyć funkcji strtol() i powinno działać normalnie.

switch (strtol(&received))
{
    ...
}

 

  • Lubię! 1
Link do komentarza
Share on other sites

Moim zdaniem użycie funkcji atoi(const char * str) w instrukcji switch jest błędne. Problem pojawia się, gdy oprócz cyfr wysyłamy coś innego, np. literkę "b", wtedy nie może zostać poprawnie wykonana konwersja z łańcucha znaków na typ int. Można to znaleźć w opisie funkcji:

Cytat

If no conversion can be performed, 0 is returned.


Wtedy przechodzimy błędnie do kodu odpowiadającemu za odebranie 0. Tutaj wystarczy po prostu, zamiast konwertować cyfrę na liczbę coś takiego, użyć wartości bezpośrednio.

switch(byte_received) {
  case '0':
    ...
  case '1':
    ...
  default:
    ...
}

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.