LWIP配置
服務器端實現
客戶端實現
錯誤分析
一。LWIP配置(FREERTOS配置,ETH配置,LWIP配置)
1.FREERTOS配置
?為什么要修改定時源為Tim1?不用systick?
原因:HAL庫與FREERTOS都需要使用systick,兩者沖突,所以修改時鐘源,讓FREERTOS使用Tim1。
?2.ETH配置
?3.LWIP配置
?4.步驟:
(1)freertos.c中會自己出現一個Lwip初始化
運行后結果:命令行中輸入ping 192.168.1.10有回復
?二。服務器端
1.功能分析
小寫轉大寫
?2.建立socket_tcp_server.h
#ifndef SOCKET_TCP_SERVER_H
#define SOCKET_TCP_SERVER_H#define SERVER_IP "192.168.1.11"
#define SERVER_PORT 6666
#define BUFF_SIZE 1024void vTcpServerTask(void);#endif
?3.建立socket_tcp_server.c,并添加到文件中
#include "socket_tcp_server.h"
#include "lwip/sockets.h"
#include "ctype.h"char ReadBuff[BUFF_SIZE];/*** @brief TCP 服務器任務* @param None* @retval None*/
void vTcpServerTask(void){int sfd, cfd, n, i;struct sockaddr_in server_addr, client_addr;socklen_t client_addr_len;//創建socketsfd = socket(AF_INET, SOCK_STREAM, 0);server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//綁定socketbind(sfd, (struct sockaddr *)&server_addr, sizeof(server_addr));//監聽socketlisten(sfd, 5);//等待客戶端連接client_addr_len = sizeof(client_addr);cfd = accept(sfd, (struct sockaddr *)&client_addr, &client_addr_len);printf("client is connect cfd = %d\r\n",cfd);while(1){//等待客戶端發送數據n = read(cfd, ReadBuff, BUFF_SIZE);//進行大小寫轉換for(i = 0; i < n; i++){ReadBuff[i] = toupper(ReadBuff[i]); }//寫回客戶端write(cfd, ReadBuff, n);}
}