Skocz do zawartości

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ę 🙂

Rozwiązanie problemu-zagadki zadanego przez autora, jakie u mnie zadziałało, znajduję się w tym linku

ponadto jest tam pokazane rozwiązanie związane z nieznikającym statusem HAL_UART_STATE_BUSY_TX.

  • 4 miesiące później...

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
  • 5 miesiące później...
  • 4 tygodnie później...

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
  • 5 miesiące później...

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ł.

@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)?
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)?

  • 3 miesiące później...

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
  • 4 miesiące później...

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:
    ...
}

 

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