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

(edytowany)
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

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.