2026-06-03 10:44 PM
i want to use simple socket based communication . using socket API.
nucleo-F746ZG connected directly to the linux laptop through ethernet cable (Orange led is ON , on both side). i make controller as client and laptop as server . my server is always listen mode but my controller not able to send any data .
In Freertos option i didnt changes anything . enabled as CMSIS_v2.
LWIP enables . in that DHCP disabled
Ethernet is enabled . didnt changed anything .
Clock configuration
tcp_clinet.c
/*
* tcp_client.c
*
* Created on: 02-Jun-2026
* Author: sawati
*/
#include "lwip/sockets.h" /* socket, connect, send, recv */
#include "lwip/netdb.h" /* inet_addr */
#include "cmsis_os.h" /* osDelay */
#include <string.h>
#include <stdio.h>
#include "tcp_client.h"
#define SERVER_IP "169.254.0.220" /* your laptop IP */
#define SERVER_PORT 5000
void TCP_Client_Task(void)
{
/* client code here */
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2); // or your LED pin
HAL_Delay(500);
int sock;
struct sockaddr_in server_addr;
char msg[] = "Hello Laptop";
sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0)
{
return;
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(5001);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
if(connect(sock,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0)
{
closesocket(sock);
return;
}
while(1)
{
send(sock, msg, strlen(msg), 0);
HAL_Delay(1000);
}
}
server.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main()
{
int server_fd;
int client_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
char buffer[100];
socklen_t len;
server_fd = socket(AF_INET, SOCK_STREAM, 0);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(5001);
bind(server_fd,
(struct sockaddr *)&server_addr,sizeof(server_addr));
listen(server_fd, 1);
printf("Waiting for STM32...\n");
len = sizeof(client_addr);
client_fd = accept(server_fd,(struct sockaddr *)&client_addr,&len);
printf("STM32 Connected\n");
while(1)
{
memset(buffer,0,sizeof(buffer));
int n = recv(client_fd,buffer,sizeof(buffer)-1,0);
if(n > 0)
{
printf("Received: %s\n",buffer);
}
}
}
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.