---
title: "W5500 IP Address"
url: "https://maker.wiznet.io/forum/14503"
markdown_url: "https://maker.wiznet.io/forum/14503/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "ilker"
created: "2022-03-14T06:50:38+09:00"
last_activity: "2022-03-14T06:50:38+09:00"
language: "en"
views: 1092
replies: 0
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# W5500 IP Address

## Question

Asked by ilker on 2022-03-14 in Ethernet Chips.

Hi,I could not communicate no matter what I did W5500 module and STM32 .It seems W5500 module does not get ip address .I saw this through modem interface .What is wrong? When I try it with arduino ,it works. Stm32 code: /* USER CODE BEGIN Header / /* @file : main.c @brief : Main program body @attention © Copyright (c) 2022 STMicroelectronics. All rights reserved. This software component is licensed by ST under BSD 3-Clause license, the “License”; You may not use this file except in compliance with the License. You may obtain a copy of the License at: opensource.org/licenses/BSD-3-Clause / / USER CODE END Header / / Includes ------------------------------------------------------------------*/ #include “main.h” /* Private includes ----------------------------------------------------------/ / USER CODE BEGIN Includes */ #include “socket.h” #include &lt;stdio.h> #include &lt;string.h> #define HTTP_SOCKET 0 //#define PORT_TCPS 5000 #define DATA_BUF_SIZE 2048 uint8_t gDATABUF[DATA_BUF_SIZE]; /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------/ / USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------/ / USER CODE BEGIN PD / / USER CODE END PD */ /* Private macro -------------------------------------------------------------/ / USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ SPI_HandleTypeDef hspi1; /* USER CODE BEGIN PV */ wiz_NetInfo gWIZNETINFO = { .mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}, // 0x00, 0x08, 0xdc, 0xab, 0xcd, 0xef //0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED .ip = {192, 168, 1, 27}, .sn = {255, 255, 255, 0}, .gw = {192, 168, 1, 1}, .dns = {0, 0, 0, 0}, .dhcp = NETINFO_STATIC }; void W5500_Select(void) { HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET); } void W5500_Unselect(void) { HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET); } void W5500_ReadBuff(uint8_t* buff, uint16_t len) { HAL_SPI_Receive(&hspi1, buff, len, HAL_MAX_DELAY); } void W5500_WriteBuff(uint8_t* buff, uint16_t len) { HAL_SPI_Transmit(&hspi1, buff, len, HAL_MAX_DELAY); } uint8_t W5500_ReadByte(void) { uint8_t byte; W5500_ReadBuff(&byte, sizeof(byte)); return byte; } void W5500_WriteByte(uint8_t byte) { W5500_WriteBuff(&byte, sizeof(byte)); } uint8_t stat; uint8_t reqnr; char Message[128]; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_SPI1_Init(void); / USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------/ / USER CODE BEGIN 0 */ /* USER CODE END 0 */ /** @brief The application entry point. @retval int / int main(void) { / USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals / MX_GPIO_Init(); MX_SPI1_Init(); / USER CODE BEGIN 2 */ HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_RESET); HAL_Delay(1); HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET); HAL_Delay(1000); reg_wizchip_cs_cbfunc(W5500_Select, W5500_Unselect); reg_wizchip_spi_cbfunc(W5500_ReadByte, W5500_WriteByte); reg_wizchip_spiburst_cbfunc(W5500_ReadBuff, W5500_WriteBuff); uint8_t rx_tx_buff_sizes[] = {2, 2, 2, 2, 2, 2, 2, 2}; wizchip_init(rx_tx_buff_sizes, rx_tx_buff_sizes); wizchip_setnetinfo(&gWIZNETINFO); ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET); /* USER CODE END 2 */ /* Infinite loop / / USER CODE BEGIN WHILE / while (1) { / USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); //printf("Creating socket...\r\n"); stat = socket(HTTP_SOCKET, Sn_MR_TCP, 80, 0); //if(stat != HTTP_SOCKET)printf(“socket() failed, code = %d\r\n”, stat); //else printf(“Socket created, connecting…\r\n”); stat = listen(HTTP_SOCKET); //if(stat != SOCK_OK){}// printf(“listen() failed, code = %d\r\n”, stat); //else printf(“listen() OK\r\n”); while(getSn_SR(HTTP_SOCKET) == SOCK_LISTEN)HAL_Delay(2); //printf("Input connection\r\n"); //if(getSn_SR(HTTP_SOCKET) != SOCK_ESTABLISHED) printf(“Error socket status\r\n”); uint8_t rIP[4]; getsockopt(HTTP_SOCKET, SO_DESTIP, rIP); //printf("IP: %d.%d.%d.%d\r\n", rIP[0], rIP[1], rIP[2], rIP[3]); sprintf(Message, "input connection nr - %d", reqnr); send(0, (uint8_t*)Message, strlen(Message)); disconnect(HTTP_SOCKET); //printf("Closing socket.\r\n"); close(HTTP_SOCKET); HAL_Delay(1000); reqnr++; } /* USER CODE END 3 */ } /** @brief System Clock Configuration @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage / __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /* Initializes the RCC Oscillators according to the specified parameters in the RCC_OscInitTypeDef structure. / RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /* Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } } /** @brief SPI1 Initialization Function @param None @retval None */ static void MX_SPI1_Init(void) { /* USER CODE BEGIN SPI1_Init 0 */ /* USER CODE END SPI1_Init 0 */ /* USER CODE BEGIN SPI1_Init 1 */ /* USER CODE END SPI1_Init 1 / / SPI1 parameter configuration*/ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN SPI1_Init 2 */ /* USER CODE END SPI1_Init 2 */ } /** @brief GPIO Initialization Function @param None @retval None */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET); /*Configure GPIO pin : RST_Pin */ GPIO_InitStruct.Pin = RST_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(RST_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : INT_Pin */ GPIO_InitStruct.Pin = INT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(INT_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : SPI1_CS_Pin */ GPIO_InitStruct.Pin = SPI1_CS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(SPI1_CS_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : PD12 */ GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** @brief This function is executed in case of error occurrence. @retval None / void Error_Handler(void) { / USER CODE BEGIN Error_Handler_Debug / / User can add his own implementation to report the HAL error return state / __disable_irq(); while (1) { } / USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** @brief Reports the name of the source file and the source line number where the assert_param error has occurred. @param file: pointer to the source file name @param line: assert_param error line source number @retval None */ void assert_failed(uint8_t file, uint32_t line) { / USER CODE BEGIN 6 / / User can add his own implementation to report the file name and line number, ex: printf(“Wrong parameters value: file %s on line %d\r\n”, file, line) / / USER CODE END 6 / } #endif / USE_FULL_ASSERT */ /************************ (C) COPYRIGHT STMicroelectronics *END OF FILE/ Arduino Code: #include &lt;SPI.h> #include &lt;Ethernet2.h> int led = 4; byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1,27); EthernetServer server(80); String readString; void setup() { Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); Serial.print("Server IP adres: "); Serial.println(Ethernet.localIP()); } void loop() { EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //read char by char HTTP request if (readString.length() &lt; 100) { //store characters to string readString += c; //Serial.print(c); } //if HTTP request has ended if (c == '\n') { Serial.println(readString); //print to serial monitor for debuging client.println("HTTP/1.1 200 OK"); //send new page client.println("Content-Type: text/html"); client.println(); client.println("&lt;HTML>"); client.println("&lt;HEAD>"); client.println("&lt;meta name='apple-mobile-web-app-capable' content='yes' />"); client.println("&lt;meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />"); client.println("&lt;link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />"); client.println("&lt;TITLE>Random Nerd Tutorials Project&lt;/TITLE>"); client.println("&lt;/HEAD>"); client.println("&lt;BODY>"); client.println("&lt;H1>Random Nerd Tutorials Project&lt;/H1>"); client.println("&lt;hr />"); client.println("&lt;br />"); client.println("&lt;H2>Arduino with Ethernet Shield&lt;/H2>"); client.println("&lt;br />"); client.println("&lt;a href=\"/?button1on\"\">Turn On LED&lt;/a>"); client.println("&lt;a href=\"/?button1off\"\">Turn Off LED&lt;/a>&lt;br />"); client.println("&lt;br />"); client.println("&lt;br />"); client.println("&lt;a href=\"/?button2on\"\">Rotate Left&lt;/a>"); client.println("&lt;a href=\"/?button2off\"\">Rotate Right&lt;/a>&lt;br />"); client.println("&lt;p>Created by Rui Santos. Visit http://randomnerdtutorials.com for more projects!&lt;/p>"); client.println("&lt;br />"); client.println("&lt;/BODY>"); client.println("&lt;/HTML>"); delay(1); //stopping client client.stop(); //controls the Arduino if you press the buttons if (readString.indexOf("?button1on") >0){ digitalWrite(led, HIGH); Serial.println("led yak"); } if (readString.indexOf("?button1off") >0){ digitalWrite(led, LOW); Serial.println("led sondur"); } //clearing string for next read readString=""; } } } } }

---

Source: https://maker.wiznet.io/forum/14503
