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