Skocz do zawartości

[STM32] Czujnik odległości TF-Luna - brak odczytu danych


Wloczykij555

Pomocna odpowiedź

Usiłuję pożenić TF-Lunę z F401CCU6 po UART i już niestety kończą mi się pomysły.

W fabrycznej konfiguracji czujnik nadaje ramkę za ramką z częstotliwością 100Hz. Format ramki jak poniżej.

Na Arduino działa bez zarzutu - zarówno odbieranie danych jak i zmiana ustawień poprzez wysyłanie komend (np. zmiana częstotliwości) a na STM32 nie mogę odebrać nawet jednego bajtu (wysyłanie chyba działa ale nie mam jak tego zweryfikować). 

Wklejam obecny kod programu przy czym próbowałem różnych podejść (z DMA włącznie). Debuggerem wyśledziłem, że funkcja 

UAR_Receive

wywala po prostu status Timeout i żadnych danych nie odbiera.

 

static uint8_t line_buffer[9]; //inicjalizacja bufora
int i;

void Receive_Data(uint8_t value) {  //Funkcja zapełniająca bufor

	if (value == 0x59) {  //sprawdzenie czy bajt jest jednym z dwóch bajtów nagłówkowych ramki (2x 0x59)
		  if (line_buffer[0] != 0x59) { //jeżeli tak to sprawdzenie czy jest to pierwszy czy drugi bajt nagłówkowy
			line_buffer[0] = value;
		} else if (line_buffer[0] == 0x59) {
			line_buffer[1] = value;
          i = 2;                       //po przekazaniu drugiego bajtu nagłówka do bufora przygotowanie funkcji do odbioru danych pomiarowych
		}

	} else {                          //jeżeli bajt != 0x59 to leci do bufora jako dane 
		line_buffer[i++] = value;     
	}
}


void Distance_Measure(void) {
	LCD_Clear();

	while (1) {

		      uint8_t value;
		      if (HAL_UART_Receive(&huart6, &value, 1, 10) == HAL_OK)
		      		  Receive_Data(value);
    }

 

Uprzedzajac wątpliwości:

Ma ktoś pomysł?

 

luna.PNG

asdf.PNG

Edytowano przez Wloczykij555
Link do komentarza
Share on other sites

(edytowany)

Dobra, chyba ogarnąłem ale nie do końca wiem dlaczego 😛

Zmieniłem UART6 na UART1 i wygląda na to, że działa. Płytkę (BlackPill) zasilam na razie z kablem USB z ładowarki a w dokumentacji wyczytałem, że piny RX i TX z UART6 są  jakoś "podpięte" pod linie danych interfejsu USB. Niestety na USB się na ten moment nie znam i nie wiem czy taki konflikt ma prawo mieć miejsce skoro usb używam tylko jako zasilania więc może ktoś w temacie zechce coś na ten temat powiedzieć.

 

Przechwytywanie.thumb.PNG.9025d76249962c1cb19ca3328c1c1eb8.PNG

Edytowano przez Wloczykij555
Link do komentarza
Share on other sites

Dnia 12.06.2022 o 21:16, Wloczykij555 napisał:

Niestety na USB się na ten moment nie znam i nie wiem czy taki konflikt ma prawo mieć miejsce skoro usb używam tylko jako zasilania więc może ktoś w temacie zechce coś na ten temat powiedzieć.

Jeżeli podłączasz USB do komputera to zdecydowanie ma prawo mieć miejsce, bo to komputer (host) steruje komunikacją USB, a nie urządzenie. W związku z tym nawet niewykorzystane USB jest testowane pod względem komunikacji, a elektronika w komputerze może wpływać na sygnał UART. To taka wersja (mocno) skrócona...

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

Kolega H1M4W4R1 ma rację.Popatrz na te dwa obrazki.One wyjaśniają wszystko.Trójkąt  przy UART1 oraz przekreślone kółko przy USB mówią,że jest konflikt.

konfliky.thumb.png.126852f25a60c8c7872f7fa5e049908c.png

 

stm32f401cc.thumb.png.d77b241e8211b4498282f4e668e7dd79.png

W moim przekonaniu użycie I2C będzie o wiele lepszym rozwiązaniem.Po pierwsze nie 115200b/s a 400k/s .Po drugie jest właściwa obsługa samego czujnika czyli biblioteki tfluna.Jedyne co musisz zrobić to odpowiedni pin powinien być na potencjale GND,który jest opisany w datasheet. When pin 5 is connected to ground, TF-Luna enters I2C mode, then its pin 2 is use as SDA data and
pin 3 is the SCL clock sending data.
Na GitHubie pod adresem https://github.com/osos11-Git/STM32F401_TF_LUNA_I2C_HAL  jest odpowiednie  rozwiązanie.USB lub UART lub I2C2 lub I2c3 możesz użyć do wyprowadzania danych do komputera lub na wyświetlacz .

 

Edytowano przez szymonw
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

@szymonw @H1M4W4R1

 

Dzięki za odpowiedzi, faktycznie mam przekreślone usb przy wyborze UART6.

Co do szybkości transmisji to nie jest mi ona potrzebna bo buduję sobie raptem dalmierz wielofunkcyjny więc czasu na pomiar jest bardzo dużo 🙂 Luna to może trochę overkill dla takiej pierdoły ale zależało mi na punktowym pomiarze i jakimkolwiek sensownym zasięgu. Co więcej, UARTA już ogarnąłem i spiąłem pomiar z wyświetlaczem więc jest git.

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.