Skocz do zawartości

STM32 flaga startu transmisji TX UART


_LM_

Pomocna odpowiedź

Pozwoliłem sobie wziąć i nieco przerobić kod kolegi @Elvis 

Przeróbka polega na uruchomieniu transmisji ( w trybie circular )za pomocą DMA i wykorzystaniu przerwań od połowy transferu takie coś:

void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) // polowa transferu ladowanie pierwszej czesci tablicy
{
static uint16_t numLedPix = 0;
  if(huart->Instance == USART1)
	{
if(start){
numLedPix = 5;
}

		if(++dataCounter >= numLEDs)
		{
			HAL_UART_DMAStop(wsUart);
		}else{
			numLedPix+=3;
			ws_encode(pixels + numLedPix,ws2812b_buf);
		}
	}
}


void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{

	static uint16_t numLedPix = 0;
	if(huart->Instance == USART1)
		{
		if(start){
	start = false; // czy to jest potrzebne?
	numLedPix = 2;
}

		if(++dataCounter >= numLEDs){
			HAL_UART_DMAStop(wsUart);
		}else{
			numLedPix+=3;
			ws_encode(pixels + numLedPix,&ws2812b_buf[8]);
		}
	}
}

Problem w tym że zanim wystartuję transmisję muszę pamiętać o ustawieniu flagi startu:

ws_encode(pixels,ws2812b_buf);
ws_encode(pixels+3,&ws2812b_buf[8]);
dataCounter = 0;
start = true;
 HAL_UART_Transmit_DMA(wsUart, ws2812b_buf,sizeof(ws2812b_buf));

dlatego zastanawia mnie czy jest może jakiś sposób na sprawdzenie czy transfer właśnie się rozpoczął czy może już trwa. Używanie tej dodatkowej zmiennej wydaje mi się mało eleganckie i czuję pod skórą że można to jakoś ładniej zrobić.

ah i przerobiony nieco przerobiona funkcja Elvisa 

static void ws_encode(uint8_t * pixel, uint8_t *buf)
{
//	uint32_t value = (g << 16) | (r << 8) | b;
uint32_t value = (pixel[0] << 16) | (pixel[1] << 8) | pixel[2];

	for (int i = 0; i < 8; i++) {
		uint32_t tmp = (value >> 21) & 0x7;
		*buf++ = ws_code[tmp];
		value <<= 3;
	}
}

 

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.