Skocz do zawartości

Kurs STM32L4 – #4 – komunikacja przez UART, debugger


Komentator

Pomocna odpowiedź

@ethanak Pytanie było raczej o macOS, a nie Linux-a.

@StefanekP Najpierw musisz uruchomić terminal, ale to już robiłeś w pierwszym kroku instrukcji którą linkowałeś:

Cytat

Press Command+Space and type Terminal and press enter/return key.

Później wystarczy uruchomić polecenie "minicom", na początek najlepiej z opcją -s, czyli:

429697281_Screenshot2022-11-21at09_52_24.thumb.png.9a84056d6ea5bbf2b44d63f9ca7b9258.png

Uruchomi się wówczas menu konfiguracji:

904079115_Screenshot2022-11-21at10_06_11.thumb.png.c85d86ada7beb47cf9ed98a6c34ac7cf.png

Wujek Google bez problemu znajdzie kilka tutoriali odnośnie minicom-a, przykładowo:

https://derrekito.github.io/Minicom-tutorial/

https://wiki.emacinc.com/wiki/Getting_Started_With_Minicom

https://www.cyberciti.biz/tips/connect-soekris-single-board-computer-using-minicom.html

Różnice w porównaniu z Linux-em to inne nazwy portów, przykładowo /dev/tty.usbserial-10 zamiast /dev/ttyUSB0, oraz inne klawisze skrótów. Pod linuxem jako przycisk Meta domyślnie używane jest Ctrl+A, natomiast na macu to zwykły Esc. Czyli naciśnięcie Esc, a następnie Z wywołuje menu:

1955435610_Screenshot2022-11-21at10_05_04.thumb.png.a67f014f5e0e578469b05bc032d8e453.png

Ale zawsze możesz na początek używać CoolTerm, pewnie będzie łatwiej zacząć 🙂

865126882_Screenshot2022-11-21at10_08_05.thumb.png.5745b55a1175c1311c7c6bdab22ca459.png

 

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

@Elvis dziękuję bardzo, jak po południu jak będę miał chwilę to zibaczę czy działa.

Jeszcze jedno, jak to jest z portami com na MAC OS? W Windowsie był ten menedżer urządzeń, czy na macu jest jakiś odpowiednik? Też nie umiałem znaleźć.

Link do komentarza
Share on other sites

Przyznaję, że od dawna nie używałem porty szeregowego na macu i sporo zapomniałem - więc zamiast /dev/tty.usbserial-10 lepiej chyba użyć /dev/cu.usbserial-10

Do wyświetlenia dostępnych portów wystarczy polecenie ls, czyli:

ls -1 /dev/cu.*

1448796372_Screenshot2022-11-21at11_11_19.thumb.png.e52aa2c851232ff3191ac89c88a91098.png

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

@Elvis ,@Treker , bardzo dziękuję za pomoc. Po zainstalowaniu i otwarciu Minicom-a rzeczywiście trochę zniechęciłem się brakiem interfejsu graficznego, ale udało mi się wykonać wszystkie ćwiczenia z CoolTerma. Jutro wezmę się za zadania domowe.

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

Cześć.
Nie wiem dlaczego, ale u mnie prawidłowe polecenia są rozpoznawane jako prawidłowe polecenia.
Program działa poprawnie, a nie jak przewidziano w kursie, z czego to może wynikać?

Pytanie.thumb.png.321fd14327a7dd4bb59c354b72f9b899.png

Przedstawiam kod programu z STM32CubeIDE:

void dodaj_linie(uint8_t wiadomosc)
{
	if (wiadomosc == '\n')
	{
		if (dlugosc_linii > 0)
		{
			bufor_linii[dlugosc_linii] = '\0';
			printf("\rOtrzymano: %s\r\n\n", bufor_linii);

			if(strcmp(bufor_linii, "Włącz") == 0)
			{
				HAL_GPIO_WritePin(DIODA_GPIO_Port, DIODA_Pin, GPIO_PIN_SET);
			}

			else if(strcmp(bufor_linii, "Wyłącz") == 0)
			{
					HAL_GPIO_WritePin(DIODA_GPIO_Port, DIODA_Pin, GPIO_PIN_RESET);
			}

			else
			{
				printf("\rNieznane polecenie: %s\r\n\n", bufor_linii);
			}

			dlugosc_linii = 0;
		}
	}
	else
	{
		if (dlugosc_linii >= MAX_DLUGOSC_LINII)
		{
			dlugosc_linii = 0;
		}
		bufor_linii[dlugosc_linii++] = wiadomosc;
	}
}

Korzystam z terminala MobaXtemr, a oto jego ustawienia:

1008410329_Pytanie2.thumb.png.79027894f3d75e23de93b1deb270793a.png

Odpowiedź w termianlu:  Układ włącza i wyłącza diodę, ale nie mam w terminalu czegoś takiego jak "Nieznane polecenie".
Dziwne, że nie wysyła polecenia za pomocą klawisza "Enter", lecz trzeba wcisnąć kombinację Ctrl+J, ale działa.

1830916593_Pytanie3.thumb.png.9baf443ffb6f9faee2ee5b71c564268c.png

Edytowano przez dragolice
Link do komentarza
Share on other sites

Albo jestem ślepy, albo w TerraTerm masz wyraz rozpoczęty małą literą, gdy program oczekuje wyrazu rozpoczętego wielką literą...

26 minut temu, dragolice napisał:

Nie wiem dlaczego, ale u mnie prawidłowe polecenia są rozpoznawane jako prawidłowe polecenia.
Program działa poprawnie, a nie jak przewidziano w kursie, z czego to może wynikać?

 

Edytowano przez H1M4W4R1
Link do komentarza
Share on other sites

Tak, tak tak, zmieniłem to, program oczekuje wyrazu rozpoczętego wielką literą.
Chodziło mi bardziej o to, że z wykorzystaniem kodu, który jest pokazany w kursie powinienem się spodziewać odpowiedzi "Nierozpoznane polecenie: ...." niezależnie od wpisanego tekstu.
Jak widać u mnie program działa prawidłowo i dociekam teraz z czego to może wynikać. Czy mój terminal jest jakiś mądry, czy o co może chodzić.

Reasumując, wpisując do terminala słowo "Włącz", program powinien wychwycić to słowo, zapalić diodę na PCB i wypisać odebrane polecenie w terminalu jako "Otrzymano: Włącz". I dokładnie tak robi.
Gdy program otrzyma nierozpoznane polecenie powinien wypisać "Nierozpoznane polecenie: ..." i dokładnie tak robi.

Natomiast według kursu, niezależnie czy wpiszę rozpoznawalne polecenie, czy nie terminal powinien wykryć je jako nierozpoznawalne.
W dalszej części jest opis jak to poprawić, tylko, że u mnie nie ma co poprawiać i zgłupiałem🙂

Zaznaczę jeszcze, że terminal z którego korzystam to MobaXterm.

Edytowano przez dragolice
Link do komentarza
Share on other sites

53 minuty temu, dragolice napisał:

Tak, tak tak, zmieniłem to, program oczekuje wyrazu rozpoczętego wielką literą.
Chodziło mi bardziej o to, że z wykorzystaniem kodu, który jest pokazany w kursie powinienem się spodziewać odpowiedzi "Nierozpoznane polecenie: ...." niezależnie od wpisanego tekstu.

Znów moje czytanie kontekstowe usunęło jedno zdanie, które było istotne...

W takim razie to kwestia kodowania znaków (zamiany tekstu na liczby) - jeżeli system kodowania nie jest identyczny w nadajniku i odbiorniku to dane słowo wygląda inaczej w każdym z nich (wymaga innych danych binarnych aka. jest zapisane za pomocą innych liczb). W ten sposób porównujesz dwie różne wartości.

U Ciebie działa, bo widocznie Twój terminal sam koduje w UTF-8 zamiast Win1250 (co robi TerraTerm), co automatycznie usuwa ten problem i program działa poprawnie.

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

@dragolice niestety nie mam teraz dostępu do Nucleo, aby sprawdzić to w praktyce, ale na 99,9% jest dokładnie tak jak napisał wyżej @H1M4W4R1. W ramach testu możesz pobrać TeraTerm i przeprowadź ten sam eksperyment. Zachowanie układu powinno być takie, jak w kursie.

Link do komentarza
Share on other sites

Dzięki za odpowiedzi. Mam jeszcze takie pytanko do tej tematyki, ponieważ myślałem, że bufor jest czyszczony i chciałbym wiedzieć jak z tego bufora wyłapywane jest słowo "Włącz" i "Wyłącz".

Czy funkcja strcmp porównuje od pierwszego znaku do pasującego wyrażenia? Przykładowo w buforze mam mały bałagan wpisując nieodpowiednie polecenie, które jest długie, np. "hahahahahahahahaha(ha)" i wysyłam znak końca linii "\n" do bufora.
Zgodnie z kodem gdy wysłany zostanie znak końca linii jest on podmieniany w buforze na "\0".
Następnie zapis znaków do bufora jest prowadzony od pierwszego znaku nadpisując wcześniejsze wartości. Najlepiej widać to na obrazku:
Pytanie.thumb.png.f4b98453bc2e6f727b4514e34455a23b.png

W takiej sytuacji polecenie jest uznawane za prawidłowe, instrukcja która służy do porównywania znaków wyłapała słowo "Włącz" i włączyła diodę.

Natomiast gdy mamy taką sytuację, gdzie słowo "Włącz" nie jest na początku bufora, lecz gdzieś później instrukcja nie włącza diody.
Jak rozumiem instrukcja ta sprawdza znak po znaku bufor i gdy znajdzie niezgodność to odpuszcza? W takim razie
Dlaczego nie działa np. polecenie "Włączzzzz"? Czy ten znak "\0" ma na to wpływ?

Pytanie 2.png

Pytanie 3.png

Edytowano przez dragolice
Link do komentarza
Share on other sites

@dragolice działanie tych programów zależy dokładnie od tego jak napisaliśmy funkcję line_append - z bufora odczytujemy dane do momentu znalezienie znaku końca linii. To dość standardowa i popularna metoda. Przeanalizuj dokładnie działanie tej funkcji to wszystko powinno być jasne. Jednym jest bufor, do którego sprzętowo trafiają odczytane dane, a czym innym są nasze funkcje, które pracują na danych z buforu.

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!

Gość
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.