Core: Cortex-M4
Microcontroller: stm32f407 (stm32f4 discovery board)
IP Stack: lwIP 1.4.1
I am using this microcontroller to control an automate and I want to send some information to a separate web server via a HTTP request in the form of:
" /* Include my libraries here */ #include "defines.h" #include "tm_stm32f4_delay.h" #include "tm_stm32f4_disco.h" #include "tm_stm32f4_usart.h" #include "tm_stm32f4_ethernet.h" #include "tm_stm32f4_watchdog.h" #include <stdio.h> #include <stdlib.h> #include <lwip/tcp.h> #include <tcp.h>
uint32_t tcp_send_packet(void); void tcpErrorHandler(void *arg, err_t err); err_t tcpSendCallback(void *arg, struct tcp_pcb *tpcb,u16_t len);
err_t connectCallback(void *arg, struct tcp_pcb *tpcb, err_t err);
struct tcp_pcb *testpcb; first Function is tcp_new :
void tcp_setup(void) { uint32_t data = 0xdeadbeef; /* create an ip */ struct ip_addr ip; IP4_ADDR(&ip,192,168,1,4); //IP of my PHP server /* create the control block */ testpcb = tcp_new(); //testpcb is a global struct tcp_pcb // as defined by lwIP /* dummy data to pass to callbacks*/ tcp_arg(testpcb, &data); /* register callbacks with the pcb */ // tcp_recv(testpcb, tcpRecvCallback); tcp_sent(testpcb, tcpSendCallback); tcp_err(testpcb, tcpErrorHandler); /* now connect */ tcp_connect(testpcb, &ip, 21, connectCallback); TM_DISCO_LedOn(LED_ORANGE); }
My Callbacks :
void tcpErrorHandler(void *arg, err_t err){ TM_DISCO_LedOn(LED_BLUE); }
err_t tcpSendCallback(void *arg, struct tcp_pcb *tpcb,u16_t len) { TM_DISCO_LedOn(LED_RED); }
err_t connectCallback(void *arg, struct tcp_pcb *tpcb, err_t err) { TM_DISCO_LedOn(LED_RED);
tcp_send_packet(); return 0; } my header :
uint32_t tcp_send_packet(void) { char *string = "SetR=01\r\n\r\n "; uint32_t len = strlen(string);
/* push to buffer */ tcp_write(testpcb, string, strlen(string), TCP_WRITE_FLAG_COPY); /* now send */ tcp_output(testpcb);
return 0; }
void lwip_init(); Main function :
int main(void) { /* Initialize system */ SystemInit(); lwip_init(); /* Initialize delay */ TM_DELAY_Init(); /* Initialize leds on board */ TM_DISCO_LedInit();
/* Initialize button */ TM_DISCO_ButtonInit();
while(1) {
tcp_setup(); } } Clearly i'm forgetting something i just don't know what it is .( i'm using Keil arm)
thank you