如何将lwIP tcp/ip堆栈与微控制器stm32f4(客户端)一起使用
核心:Cortex-M4 微控制器:stm32f407(stm32f4发现板) IP堆栈:lwIP 1.4.1 我正在使用该微控制器来控制自动控制,我想通过HTTP请求将一些信息发送到单独的web服务器,格式如下: lwIP有一个用于微处理器的http服务器,但我的目标是相反的(微控制器是客户端) 我不确定我做错了什么,但在TCP_Connect之后,它总是转到TCP_错误处理程序:如何将lwIP tcp/ip堆栈与微控制器stm32f4(客户端)一起使用,tcp,stack,microcontroller,lwip,stm32f4,Tcp,Stack,Microcontroller,Lwip,Stm32f4,核心:Cortex-M4 微控制器:stm32f407(stm32f4发现板) IP堆栈:lwIP 1.4.1 我正在使用该微控制器来控制自动控制,我想通过HTTP请求将一些信息发送到单独的web服务器,格式如下: lwIP有一个用于微处理器的http服务器,但我的目标是相反的(微控制器是客户端) 我不确定我做错了什么,但在TCP_Connect之后,它总是转到TCP_错误处理程序: #include "stm32f4xx.h" /* Include my libraries he
#include "stm32f4xx.h"
/* 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;
我的回电:
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;
}
我的标题:
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();
主要功能:
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();
} }
很明显,我忘记了一些我不知道是什么的东西
谢谢- 使用
LwIP\u Init
- 调用
外部tcp\u setup
仅一次不在while循环中,以仅设置一个tcp连接,而不是无限连接while循环
- 在
中,定期处理LwIP传入数据。由于您正在使用my(TM Tilen Majerle)以太网包装器进行STM32F4,因此应该在while循环中添加这些行while loop
/* Check if any packet received */ if (LwIP_CheckFrameReceived()) { /* Process received ethernet packet */ LwIP_Pkt_Handle(); } /* Handle periodic timers for LwIP */ LwIP_Periodic_Handle(EthernetLocalTime);
TM\u ETHERNET\u Update
函数。你的选择,同样有效
就你而言:
int main() {
....
lwip_init();
tcp_setup();
while (1) {
TM_ETHERNET_Update();
}
}
int main() {
....
lwip_init();
tcp_setup();
while (1) {
TM_ETHERNET_Update();
}
}