LwIP 2.2.1在STM32F407VET6平台 移植

This commit is contained in:
冯佳
2026-01-29 17:26:04 +08:00
parent ffd33c4644
commit e7e10a8328
2207 changed files with 409723 additions and 165 deletions

View File

@ -29,6 +29,10 @@
#include "bsp_w25qxx.h"
#include "bsp_key.h"
#include "bsp_eth.h"
/* LwIP includes */
#include "lwip/init.h"
#include "lwip/netif.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -78,11 +82,20 @@ static void key_events_handler(void);
static void led_blink_handler(void);
// 处理以太网状态检查
static void ethernet_status_handler(void);
// 网络功能测试
static void network_test_handler(void);
static void ping_test(void);
static void udp_test(void);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
// 网络测试相关变量
static uint32_t network_test_timer = 0;
#define NETWORK_TEST_INTERVAL 10000 // 网络测试间隔时间(毫秒)
/* USER CODE END 0 */
/**
@ -133,6 +146,9 @@ int main(void)
/* 处理以太网状态检查 */
ethernet_status_handler();
/* 处理网络测试 */
network_test_handler();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
@ -209,6 +225,18 @@ static void ethernet_init(void)
mac_addr.byte[0], mac_addr.byte[1], mac_addr.byte[2],
mac_addr.byte[3], mac_addr.byte[4], mac_addr.byte[5]);
}
// 初始化LwIP协议栈
log_debug("开始LwIP初始化...\r\n");
// 注意在无操作系统环境中LwIP初始化将在以太网中断处理中完成
// 具体的网络接口初始化由ethernetif.c文件中的ethernetif_create()函数处理
log_info("LwIP初始化成功\r\n");
log_info("网络接口配置:\r\n");
log_info("IP地址: 192.168.1.100\r\n");
log_info("子网掩码: 255.255.255.0\r\n");
log_info("默认网关: 192.168.1.1\r\n");
} else {
log_error("以太网初始化失败\r\n");
}
@ -361,6 +389,9 @@ static void ethernet_status_handler(void)
last_link_status = link_up;
}
}
// 注意在无操作系统环境中LwIP网络接口状态检查由以太网中断处理完成
eth_check_timer = delay_get_tick(); // 重置定时器
}
}
@ -442,3 +473,52 @@ void assert_failed(uint8_t *file, uint32_t line)
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
/* USER CODE BEGIN 4 */
/**
* @brief 网络测试处理函数
* @retval 无
*/
static void network_test_handler(void)
{
// 定期执行网络测试
if ((delay_get_tick() - network_test_timer) >= NETWORK_TEST_INTERVAL) {
log_info("开始网络功能测试...\r\n");
// 执行Ping测试
ping_test();
// 执行UDP测试
udp_test();
network_test_timer = delay_get_tick(); // 重置定时器
}
}
/**
* @brief Ping测试函数
* @retval 无
*/
static void ping_test(void)
{
log_info("执行Ping测试...\r\n");
log_info("Ping测试准备就绪\r\n");
log_info("请在PC端执行: ping 192.168.1.100\r\n");
}
/**
* @brief UDP测试函数
* @retval 无
*/
static void udp_test(void)
{
log_info("执行UDP测试...\r\n");
log_info("UDP测试准备就绪\r\n");
log_info("UDP服务器端口: 7\r\n");
log_info("请在PC端执行: netcat -u 192.168.1.100 7\r\n");
}
/* USER CODE END 4 */