Stos LwIP + FreeRTOS a odczyt USART z czujnika pyłu PMS3003

Odpowiedz Nowy wątek
2018-12-28 22:19
0

Witam, mam taki problem z odczytem danych z czujnika PMS3003. Kiedy próbuje odczytać dane z czujnika używajać systemu RTOS, nie ma żadnego problemu, odpowiednio dostaję tablicę danych i wysyłam sobie je za pomocą Transmita:

void StartDefaultTask(void const * argument)
{
  MX_LWIP_Init();
  /* Infinite loop */> 
  for(;;)   
       HAL_UART_Receive_DMA(&huart2, (uint8_t *)in, 24);
       HAL_UART_Transmit(&huart6, (uint8_t *)in, 24, 100);> 
       osDelay(1000);
  }

Tutaj zdjęcie z RealTerma:
screenshot-20181228221111.png
Jednak kiedy próbuje to zrobić na moim serwerze, jedyne co dostaję to "0" (w tym wypadku value[11] powinien wynosić 57), próbując na wszelkie sposoby. Tutaj mój kod piku HTTPSERVER_NETCONN_C.

          if (strncmp((char const *)buf, "GET /PM25", 9) == 0) {
                  HAL_UART_Receive_DMA(&huart3, value, 24);
                  sprintf(buf, "PM2.5: %d ÎĽg/mÂł", value[11]);
                  netconn_write(conn, (const unsigned char*)buf, strlen(buf), NETCONN_NOCOPY);

Oraz task w mainie:

void StartDefaultTask(void const * argument)
{

  MX_LWIP_Init();
  http_server_netconn_init();

  for(;;)
  {
    osDelay(1);
  }

}

Tutaj widok na webAPI:
screenshot-20181228221722.png
Program generuję głównie przez STM32CubeMX. Serwer bazuje na netconn API . Głównym problemem według mnie mogą być priorytety, w STM32CubeMX priorytet dla DMA ustawiłem na Very High. Próbowałem rownież bez DMA, z przerwaniami i normalnie z opóźnieniami niestety bez skutku. Próbowałem również wszelkich callbacków, ustawiania odczytu z USARTA w różnych miejsach ale dalej bez skutku. Wydaję mi się że system RTOS coś tutaj miesza ale po długich poszukiwaniach niestety nie jestem w stanie tego samemu rozkminić. Myslałem jeszcze żeby stworzyć zadanie dla RTOSa z osobnym odyczytwaniem danych i przekazywaniem zmiennej ale wydaję mi się że bez tego wartości też powinny być wiświetlane. Z góry dziękuję za pomoc.

PS
Używam Nucleo STM32F746ZG

edytowany 6x, ostatnio: Grethold, 2018-12-30 12:23

Pozostało 580 znaków

2018-12-31 01:18

Problem rozwiązany. Wystarczyło ustawić DMA z Circular Mode.Dodatkowo miałem źle zmapowane pinouty w tym projekcie. Do zamknięcia.

edytowany 1x, ostatnio: Grethold, 2018-12-31 01:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0