• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

STM32 odczyt z USART niewiadomej liczby znaków

VPS Starter Arubacloud
0 głosów
196 wizyt
pytanie zadane 27 lipca 2022 w Mikrokontrolery przez Mavimix Dyskutant (8,420 p.)
przywrócone 27 lipca 2022 przez Mavimix

W jaki sposób mogę odebrać niewiadomą ilość znaków, która przychodzi po UART'ie do płytki Nucleo-F303PE? Na razie doszedłem do tego, że przychodzące dane wczytuje do 10-elementowej tablicy, ale co w przypadku, gdy chcę odebrać wiadomość, gdy nie wiem ile ma znaków? Szukałem w internecie, ale nie rozumiem zbytnio jak to działa i jak to zaimplementować do swojego kodu, który na razie wygląda tak:

volatile uint8_t receivedData[10];
volatile uint8_t test2[] = "Test\r\n";

int main(void)
{
	HAL_Init();

	SystemClock_Config();

	MX_GPIO_Init();
	MX_USART1_UART_Init();
	MX_USART2_UART_Init();

	HAL_UART_Receive_IT(&huart2, receivedData, 10);

	uint8_t test[] = "Hello World !!!\r\n";
	while (1)
	{
		HAL_UART_Transmit(&huart2,test,sizeof(test),10);// Sending in normal mode
		HAL_Delay(1000);
	}
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance == USART2)
	{
		HAL_UART_Transmit(&huart2, test2, sizeof(test2), sizeof(test2)/sizeof(test2[0]));

		uint8_t Data[40]; // Tablica przechowujaca wysylana wiadomosc.
		uint16_t size = 0; // Rozmiar wysylanej wiadomosci

		size = sprintf(Data, "Odebrana wiadomosc: %s\n\r",receivedData);
		HAL_UART_Transmit_IT(&huart2, Data, size);
		HAL_UART_Receive_IT(&huart2, receivedData, 10);
	}
}

Proszę o pomoc.

1 odpowiedź

0 głosów
odpowiedź 28 lipca 2022 przez Oscar Nałogowiec (29,300 p.)
Najbardziej uniwersalnie jest czytać pojedyncze znaki i podejmować odpowiednią akcje w zależności od aktualnego stanu i odebranego znaku (automat stanów). Często jednak przetwarza się porcje danych jakoś zdefiniowane, np linie tekstu (z ENTEREM na końcu). Zwykle biblioteki posiadają funkcję do wczytania linii, a jak nie ma to wyżej opisaną metodą (czytanie do bufora aż napotka się ENTER).

Podobne pytania

–1 głos
2 odpowiedzi 521 wizyt
pytanie zadane 9 listopada 2020 w C i C++ przez SzymonPJ Użytkownik (940 p.)
0 głosów
0 odpowiedzi 176 wizyt
pytanie zadane 14 grudnia 2018 w C i C++ przez Karol Matusiewicz Nowicjusz (200 p.)
0 głosów
1 odpowiedź 1,713 wizyt

92,963 zapytań

141,928 odpowiedzi

321,162 komentarzy

62,298 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...