Skocz do zawartości

szczygiel256

Użytkownicy
  • Zawartość

    3
  • Rejestracja

  • Ostatnio

Reputacja

5 Neutralna

O szczygiel256

  • Ranga
    1/10
  • Urodziny 16.01.1977

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Ruda Śląska
  • Języki programowania
    C
  • Zainteresowania
    Elektronika, modelarstwo, majsterkowanie
  • Zawód
    Konstruktor elektronik, programista embedded

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Używam Atollica. Niemniej to kolejne wcielenie Eclipse tak jak CubeIDE. W Atollicu wymaga to dodania do opcji projektu dyrektywy generowania pliku HEX jak na lewym djęciu. Poniżej masz tą komendę. arm-atollic-eabi-objcopy.exe -O ihex "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.hex" Tworzy ona w katalogu DEBUG plik HEX. Ze względu na to, że Atollic nie jest połączony bezpośrednio ze środowiskiem CUBE dodałem sobie do EXTERNAL TOOLS możliwość programowania poprzez USB. Możliwość taką daje CubeMXProgrammer. Można go używać z linii komend. Jak dla mnie jest to bardzo wygodne. Na prawym zdjęciu masz przykład dla programowania z użyciem SWD bo w domu nie używam USB.
  2. Oczywiście, że się da. Można użyć UART-a lub USB. Należy tylko przy włączaniu zasilaniu ustawić odpowiednio piny BOOT. Nie orientuje się jak jest przy H7 ale przy STM32F207 wystarczy podczas włączania zasilania ustawić w stan wysoki pin BOOT0 np. switchem lub zworką. Nie wiem czy umożliwia takie programowanie STM32CubeIDE ale programem STM32CubeProgrammer na pewno to zrobisz.
  3. Cześć, na początek chciałbym się przywitać. Nie pamiętam czy pisałem coś na forum, a jeżeli tak to musiało być bardzo dawno. Zaprojektowałem urządzenie serwera HTTP na bazie stm32f207 i DP83848 (PHY). Oprogramowanie wygenerowałem z użyciem najnowszego CubeMX oraz wersji biblioteki dla procesora stm32f207 v1.9. Wykorzystałem LWIP jako stos TCP/IP oraz FreeRtos-a jako system, komunikacja TCP za pomocą netconn. Wygenerowany szablon zmodyfikowałem na wzór dostarczonego przez ST. Utworzyłem wątek http_server_netconn_thread(), w którym oczekuję na informacje ze strony. Nic odkrywczego. Pierwsza linia to utworzenie nowego wątku a poniżej jest sam wątek. httpTaskHandle = sys_thread_new("HTTP", http_server_netconn_thread, NULL, 4095, osPriorityHigh); void http_server_netconn_thread(void *arg) { static struct netconn *TCPListener, *newconn; static err_t err, conn_check, deleteErr; TCPListener = netconn_new(NETCONN_TCP); if (TCPListener != NULL) { err = netconn_bind(TCPListener, IP_ADDR_ANY, PORT_60662); if (err == ERR_OK) { netconn_listen(TCPListener); while(1) { netconn_set_recvtimeout(TCPListener, TIME_DELAY_500_MS); conn_check = netconn_accept(TCPListener, &newconn); if(osOK == osTimerStart (timeOutHttpServerHandle, TIME_DELAY_60_SECONDS)) { timerHttpStatus = TIMER_RUN; } if(ERR_OK == conn_check) { http_server_serve(newconn); netconn_close(newconn); netconn_delete(newconn); } osTimerStop(timeOutHttpServerHandle); } } else { netconn_close(newconn); netconn_delete(newconn); } } } Funkcja http_server_serve(newconn)() sprawdza czy przyszło zapytanie http i na nie reaguje. Również nic odkrywczego. void http_server_serve(struct netconn *conn) { connCheck = netconn_recv(conn, &inbuf); if(connCheck == ERR_OK) { if (netconn_err(conn) == ERR_OK) { // pobranie danych do bufora netbuf_data(inbuf, (void**)&buf, &buflen); analiza_metody_GET(buf); analiza_metody_POST(buf); } } netconn_close(conn); netbuf_delete(inbuf); } Jeżeli przyszło zapytanie ze strony, program wysyła odpowiedź na to zapytanie. I mógłbym powiedzieć, że wszystko działa. Program działa dobrze do czasu gdy pracuje w sieci lokalnej. Problemy zaczęły się gdy udostępniłem stronę poza sieć lokalną. Szczególnie zauważalne to jest gdy chcę wyświetlić stronę na smartfonie poprzez sieć komórkową. Dane do przeglądarki przesyłam za pomocą funkcji netconn_write_partly(). netconnResult = netconn_write_partly(conn, buffer_send, len, NETCONN_NOCOPY, &written); Niestety po pewnym czasie program blokuje się na tej funkcji i pozostaje już tylko reset. Sytuacje taką zauważyłem przy przesyłaniu do przeglądarki pakietów danych o objętości 6,5 kB. Przy przesyłaniu pakietów o objętości poniżej 1kB takich problemów nie zauważyłem. Przeglądając internet znalazłem parę wątków o problemach z oprogramowaniem od ST. Niestety nie pomogły mi rozwiązać mojego problemu. Pytanie do osób przerabiających temat serwera www na stm32 czy przerabiały podobny problem lub czy istnieje możliwość włączenia dla tej funkcji timeout-u umożliwiającego jej opuszczenie i dalsze działanie urządzenia?
×
×
  • Utwórz nowe...