Skocz do zawartości

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


Pomocna odpowiedź

Napisano (edytowany)

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

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

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

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