Skocz do zawartości

Kurs STM32L4 – #4 – komunikacja przez UART, debugger


Komentator

Pomocna odpowiedź

Było:

int myInt = 1234; // OK

char buffer[20]; // Bufor na dane

snprintf(buffer, sizeof(buffer), "%d\r\n", myInt); // Konwersja int na string

HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);

OK, ale portem pojawia się

printf("Hello world! 1 ");

printf("Hello world! 2 ");

printf("Hello world! 3 ");

fflush(stdout);

Nie rozumiem, czy to jest w tej samej sekcji main() programu co część ta wyżej ???

Bo u mnie ta część z printf() nie działa. O co chodzi ?

Link do komentarza
Share on other sites

23 godziny temu, lzo napisał:

Bo u mnie ta część z printf() nie działa. O co chodzi ?

Jak dokładnie mamy to rozumieć? Nie kompiluje się, pojawiają się jakieś błędy? Czy po poprawnej kompilacji nie widać efektu działania? Czy inne przykłady z użyciem printf działały poprawnie?

  • Pomogłeś! 1
Link do komentarza
Share on other sites

cześć, kurs oczywiście super, ale mam problem w zrozumieniu jednego z zagadnień. Mianowicie, jak mamy funkcje HAL_transmitdata to argument pData jest wskaźnikiem. Dlaczego więc dajemy tam samą zmienną message zamiast &message? Pewnie proste ale nie rozumiem. pozdrawiam

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

@Michu2137 witam na forum 🙂 Miło słyszeć, że kurs Ci się podoba! W podanym przykładzie mamy tablice "message[]", sama nazwa "message" (bez []) to właśnie adres początku tablicy. Nie ma to żadnego konkretnie związku z STM32 - tak po prostu jest w tym języku programowania 🙂 Więcej na ten temat znajdziesz na poprzednich stronach tego tematu - konkretnie tutaj: https://forbot.pl/forum/topic/20000-kurs-stm32l4---4---komunikacja-przez-uart-debugger/page/3/#comment-166568

 

  • Pomogłeś! 1
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

Czy jest jakiś sposób na szybsze tworzenie nowych projektów? Na yt widzę, że niektórzy po prostu kopiują dany projekt w Project Explorer zmieniając nazwę i działa, u mnie z kolei podczas debugowania takiego skopiowanego, edytowanego programu otwiera się kolejny plik main.c tyle że z jakąś ikoną i kodem w oryginalnego projektu obok i całość nie działa prawidłowo.

Link do komentarza
Share on other sites

Hejo,

Moje amatorskie rozwiązania do zadania 2 i 3:

ZAD 2:
 

  /* USER CODE BEGIN WHILE */

  int buttonValue = 0; // inicjalna wartość

  while (1)
  {
	  if (is_button_pressed()){ // sprawdzenie czy przycisk jest wciśnięty
		  buttonValue++; 	// zwiększenie zmiennej o 1
		  char buffer[100];	// Bufor na dane
		  sprintf(buffer, "%d", buttonValue);  // Konwersja wartości int na string
		  HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);  // wysyłka wartości poprzez UART
		  HAL_Delay(500);

	  }
    /* USER CODE END WHILE */

 

Oraz zadanie 3:
W zadaniu 3 poszedłem moim tokiem rozumowania i zaświecam diodę LD2 co 10 kliknięć przycisku.
Musiałem zacząć od wartości inicjalnej 1, bo 0 mod 10 to też 0 🙂
 

  /* USER CODE BEGIN WHILE */

  int buttonValue = 1; // inicjalna wartość

  while (1)
  {
	  if (is_button_pressed() && buttonValue % 10 != 0){// sprawdzenie czy przycisk jest wciśnięty i czy modulo z 10 jest rozne od 0
		  led_set(0);  // wyłaczenie LED 2
		  char buffer[100];	// Bufor na dane
		  sprintf(buffer, "%d", buttonValue);  // Konwersja wartości int na string
		  HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);  // wysyłka wartości poprzez UART
		  buttonValue++; // zwiększenie zmiennej o 1


	  }else if(is_button_pressed() && buttonValue % 10 == 0){  // sprawdzenei czy przycisk jest wcisniety i czy modulo z 10 jest rowne 0
			  led_set(1); // Właczenie LED2
			  char buffer[100];	// Bufor na dane
			  sprintf(buffer, "%d", buttonValue);  // Konwersja wartości int na string
			  HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);  // wysyłka wartości poprzez UART
			  buttonValue++;
		  };
		  HAL_Delay(150);
	  }
    /* USER CODE END WHILE */

 

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

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

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.