Skocz do zawartości

Kurs STM32L4 – #4 – komunikacja przez UART, debugger


Komentator

Pomocna odpowiedź

(edytowany)
Dnia 29.04.2022 o 12:12, jd123 napisał:

int count = 0;
HAL_UART_Transmit(&huart2, (uint8_t*) &count, sizeof(count), HAL_MAX_DELAY);

Powyższa linia nic nie wyświetla w terminalu (szukałem w internecie, ale nic nie znalazłem), czy ktoś podpowie jak to naprawić?

Taka linia wysłała 4 bajty o wartości 0, bo int ma zapewne 4 bajty, wnioskując po 32 w nazwie STM32, czyli cztery znaki NUL w interpretacji terminala. Takie nic nie pokazują. Musisz najpierw zamienić liczbę na jej reprezentację tekstową. Przykładowo można to zrobić funkcją sprintf.

A we fragmencie kursu o komunikacji UART jest też opis jak przekierować printf() na port szeregowy.

Edytowano przez trainee
Link do komentarza
Share on other sites

Cześć, mam pytanie dotyczące rzutowania z const char* na uint8_t*: czy to oznacza, że zamieniamy wskaźnik na tablicę znaków np. ['a', 'b', 'c', 'd'] na tablicę wartości liczbowych/bajtów czyli tutaj [97, 98, 99, 100]?

Link do komentarza
Share on other sites

19 godzin temu, daneil737 napisał:

Cześć, mam pytanie dotyczące rzutowania z const char* na uint8_t*: czy to oznacza, że zamieniamy wskaźnik na tablicę znaków np. ['a', 'b', 'c', 'd'] na tablicę wartości liczbowych/bajtów czyli tutaj [97, 98, 99, 100]?

char to już jest liczba, nie wiadomo jedynie z góry czy ze znakiem czy bez (signed czy unsigned). Nazwa char bierze się z tego, że ma to być semantycznie taka liczba, która mieści wartości "zbioru znaków środowiska wykonawczego", że tak sobie pozwolę przetłumaczyć specyfikację. Czy to ma wciąż dobre znaczenie jak mamy Unicode, to ja nie wiem, temat na filozoficzne rozprawy. Nie może mieć też mniej niż 8 bitów, choć na wybranych platformach może mieć więcej. Tu z góry wiemy, że w naszym środowisku ma 8 bitów. Jedyne co tak naprawdę się dzieje, to poinformowanie kompilatora, że świadomie chcemy tę tablicę przekazać w miejsce wskaźnika do typu uint8_t, bo takiego wymaga funkcja i inaczej kompilator by się mógł skarżyć. Bo w końcu w pamięci nie ma podziału na coś takiego jak znaki czy liczby, wszystko jest liczbą.

Może brak tej różnicy, wymagającej zamiany, rozjaśni przykład:

#include <stdio.h>

int main()
{
	char a = 65;
	
	printf("a %%c = %c\n", a);
	printf("a %%d = %d\n", a);

	int b = 'z';

	printf("b %%c = %c\n", b);
	printf("b %%d = %d\n", b);
}

 

Edytowano przez trainee
Link do komentarza
Share on other sites

Witam,

mam problem z odbiorem danych przez UART

do programu nadającego dane z poprzedniej części lekcji, zgodnie z wytycznymi wkleiłem kod:

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  uint8_t value;
	  HAL_UART_Receive(&huart2, &value, 1, HAL_MAX_DELAY);

	  printf("Odebrano: %c\n", value);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

po skompilowaniu i przesłaniu do mikrokontrolera program nie chce wyświetlać wpisywanych znaków.

 

 

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

@MacBi ok, to zacznijmy "od początku", bo jak widać w komentarzach inni nie mieli tego problemu, coś musi być nie tak konkretnie u Ciebie. Czy wszystkie poprzednie ćwiczenia z UART-em działały poprawnie? Z jakiego terminala korzystasz na PC?

Link do komentarza
Share on other sites

Dodaj proszę do programu jednokrotne wyświetlenie jakiejś wiadomości testowej przed pętlą while - aby mieć pewność, że program działa poprawnie i jest nawiązana łączność z UART. Pokaż również zrzut ekranu z konfiguracją UART w Cube.

Link do komentarza
Share on other sites

Cześć, mam problem- niestety wygląda na to, że używany w kursie Tera Term nie jest kompatybilny z Mac OS, którego używam. Czy zna ktoś jakiś zamiennik, z którego mógłbym skorzystać? A może mogę wykonać wszystkie ćwiczenia z kursu na terminalu wbudowanym w IDE? Z góry dziękuję za pomoc.

Edytowano przez StefanekP
Link do komentarza
Share on other sites

@StefanekP jeśli nie możesz skorzystać z Tera Term to wykorzystaj dowolny inny terminal, który już znasz na Mac OS. W tym przypadku nie trzeba korzystać dokładnie z tego programu. Niestety nie korzystam z Mac OS, więc nie doradzę tutaj nic z własnego doświadczenia - ale może @Elvis będzie mógł coś doradzić 🙂

Link do komentarza
Share on other sites

Dnia 14.11.2022 o 09:53, Elvis napisał:

Ja najczęściej używam minicom-a. Działa tak samo pod Linux-em jak i MacOS, więc dla mnie to wygodne rozwiązanie.

Ale jak ktoś lubi interfejsy graficzne to polecam CoolTerm (https://freeware.the-meiers.org).

@Elvis  dziękuję bardzo, chyba udało mi się pobrać minicoma(przy pomocy komend z tej strony:https://macappstore.org/minicom/. Tylko teraz nie za bardzo wiem jak się tego używa a nawet jak to otworzyć (znajduje się w jakiejś dziwnej lokalizacji do której nie mam dostępu). Istnieje jakaś instrukcja użytkowania tego programu? bo nie mogłem znaleźć. Czy mógłby mi ktoś doradzić/ odesłać do odpowiedniej strony? Przepraszam, jeżeli pytanie jest głupie, ale dopiero co przesiadłem się z Windowsa i jeszcze nie wszystko ogarniam.

Link do komentarza
Share on other sites

18 godzin temu, StefanekP napisał:

chyba udało mi się pobrać minicoma

 

Minicom jest w każdej dystrybucji. To nie Windows, nie musisz szukać po różnych stronach. Instalacja dla debianopochodnych (czyli wszelkie Ubunty, Minty itd):

sudo apt install minicom

Dla bardziej leciwych dystrybucji zamień apt na apt-get.

Dla redhatowych (Fedora, CentOS):

sudo yum install minicom

Poza tym możesz korzystać z PuTTY (ja nie lubię bo ma 999 funkcji których nie wykorzystuję a nie ma jednej która mi potrzebna). Ja korzystam z gtkterm.

 

 

  • Lubię! 1
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.