W6100EVB-HTTP_Server 빌드애러

W6100EVB-HTTP_Server-master.zip (536.5 KB)

앞에 보낸것은 원본이고 이것은 제가 코딩 추가한 것입니다.

업르도중: W6100EVB-HTTP_Server-master (2).zip…

안녕하세요.
추가한 이 부분이 동작을 하지 않습니다.확인 부탁드립니다.

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_Base_Start_IT(&htim4);
HAL_TIM_Base_Start_IT(&htim5);

/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//HAL_GPIO_WritePin(GPIOB,lp1_Pin,1);

//if(0 == HAL_GPIO_ReadPin(GPIOB,lp2_Pin))

{
	if(htim->Instance == TIM4){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_9);}
	{
		//if(0 == HAL_GPIO_ReadPin(GPIOC,LP2_Pin))TIM4_100msCnt++;
		if(4<=TIM4_100msCnt){TIM4_100msCnt=0;}
	}
}
//if(GPIO_Pin == IP_Pin)



cnt = TIM3->CNT;

//-----------------------------------------천단위 표시------------------------------------------
cjs = cnt/1000;
cjs1 = cnt - (cjs *1000);
//-----------------------------------------백단위 표시------------------------------------------
qor = cjs1/100;
qor1 = cjs1 - (qor * 100);
//-----------------------------------------십댠위 표시------------------------------------------
tlq = qor1/10;
tlq1 = qor1 - (tlq * 10);
//-----------------------------------------일단위 표시------------------------------------------
dlf = tlq1/1;
//-----------------------------------------일,십,백,천 단위 GPIO reset---------------------------
HAL_GPIO_WritePin(GPIOC,S0_Pin,0);
HAL_GPIO_WritePin(GPIOC,S1_Pin,0);
HAL_GPIO_WritePin(GPIOC,S2_Pin,0);
HAL_GPIO_WritePin(GPIOC,S3_Pin,0);
//-----------------------------------------0,1,2,3,4,5,6,7,8,9 GPIO set---------------------
HAL_GPIO_WritePin(GPIOE, A_Pin|B_Pin|C_Pin|D_Pin|E_Pin|F_Pin|G_Pin, GPIO_PIN_SET);

//-----------------------------------------TIME5 counter FND 순차표시 인더럽트--------------------
if(htim->Instance == TIM5)
{
if((1CNT)|(1999>TIM3->CNT))
if(1>TIM3->CNT){TIM3->CNT = 0;}
if(1999CNT){TIM3->CNT = 1999;}
TIM2->CCR1 = TIM3->CNT;

안녕하세요
code 부분이 짤라져 있어서 확인이 힘듭니다.
추가한 부분만이 아니라 main.c 의 전체 부분을 주시면 확인해 보도록 하겠습니다.

/* USER CODE BEGIN Header /
/
*


  • @file : main.c
  • @brief : Main program body

  • @attention
  • © Copyright (c) 2019 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 “loopback.h”
#include “socket.h”
#include “httpServer.h”
#include “webpage.h”
#include “board_init.h”
/
USER CODE END Includes */

/* Private typedef -----------------------------------------------------------/
/
USER CODE BEGIN PTD */
#define SOCK_TCPS 0
#define SOCK_UDPS 1
#define PORT_TCPS 5000
#define PORT_UDPS 3000

#define MAX_HTTPSOCK 4

// Addfess Family v4
#define AF_INET 2
// Addfess Family v6
#define AF_INET6 23
// Addfess Family DUAL
#define AF_INET_DUAL 11
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------/
/
USER CODE BEGIN PD /
uint8_t socknumlist[] = {0, 1, 2, 3};
uint8_t RX_BUF[DATA_BUF_SIZE];
uint8_t TX_BUF[DATA_BUF_SIZE];
uint8_t URX_BUF[DATA_BUF_SIZE];
unsigned int URX_BUF_cnt = 0;
unsigned int URX_BUF_Flag = 0;
static int cnt = 0;
volatile int dlf = 0;
volatile int tlq = 0;
volatile int tlq1 = 0;
volatile int qor = 0;
volatile int qor1 = 0;
volatile int cjs = 0;
volatile int cjs1 = 0;
volatile int TIM5_1000msCnt = 0;
volatile int TIM4_100msCnt = 0;
/
USER CODE END PD */

/* Private macro -------------------------------------------------------------/
/
USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi2;

TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim3;
TIM_HandleTypeDef htim4;
TIM_HandleTypeDef htim5;

UART_HandleTypeDef huart1;

/* USER CODE BEGIN PV */
wiz_NetInfo gWIZNETINFO = { .mac = {0x00,0x08,0xdc,0xff,0xff,0xff},
.ip = {192,168,0,13},
.sn = {255, 255, 255, 0},
.gw = {192, 168, 0, 1},
.dns = {168, 126, 63, 1},
.lla = {0xfe,0x80, 0x00,0x00,
0x00,0x00, 0x00,0x00,
0x02,0x00, 0xdc,0xff,
0xfe,0x57, 0x57,0x62},
.gua={0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00},
.sn6={0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00, 0x00,
0x00,0x00,0x00,0x00},
.gw6={0x00, 0x00, 0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00, 0x00,0x00,
0x00,0x00, 0x00,0x00}
};

uint8_t WIZ_Dest_IP[4] = {192, 168, 0, 232}; //DST_IP Address

uint8_t DestIP6_L[16] = {0xfe,0x80, 0x00,0x00,
0x00,0x00, 0x00,0x00,
0x31,0x71,0x98,0x05,
0x70,0x24,0x4b,0xb1
};

uint8_t DestIP6_G[16] = {0x20,0x01,0x02,0xb8,
0x00,0x10,0x00,0x01,
0x31,0x71,0x98,0x05,
0x70,0x24,0x4b,0xb1
};

uint8_t Router_IP[16]= {0xff,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02
};
uint8_t data_buf[2048];
void print_network_information(void);
void wep_define_func(void);
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI2_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM2_Init(void);
static void MX_TIM3_Init(void);
static void MX_TIM4_Init(void);
static void MX_TIM5_Init(void);
static void MX_NVIC_Init(void);
/
USER CODE BEGIN PFP */
uint8_t rxData;

// Using printf Function
int _write(int fd, char *str, int len)
{
for(int i=0; i<len; i++)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&str[i], 1, 0xFFFF);
}
return len;
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {

/*
    This will be called once data is received successfully,
    via interrupts.
*/

 /*
   loop back received data
 */
 HAL_UART_Receive_IT(&huart1, &rxData, 1);
 HAL_UART_Transmit(&huart1, &rxData, 1, 1000);
 //massage input end enter key flag
 URX_BUF[URX_BUF_cnt++] = rxData;
 if((rxData == '\r') ||(URX_BUF_cnt > DATA_BUF_SIZE))
 {
	 URX_BUF_Flag = 1;
 }

}
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------/
/
USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//HAL_GPIO_WritePin(GPIOB,lp1_Pin,1);

//if(0 == HAL_GPIO_ReadPin(GPIOB,lp2_Pin))

{
	if(htim->Instance == TIM4){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_9);}
	{
		//if(0 == HAL_GPIO_ReadPin(GPIOC,LP2_Pin))TIM4_100msCnt++;
		if(4<=TIM4_100msCnt){TIM4_100msCnt=0;}
	}
}
//if(GPIO_Pin == IP_Pin)



cnt = TIM3->CNT;

//-----------------------------------------천단위 표시------------------------------------------
cjs = cnt/1000;
cjs1 = cnt - (cjs *1000);
//-----------------------------------------백단위 표시------------------------------------------
qor = cjs1/100;
qor1 = cjs1 - (qor * 100);
//-----------------------------------------십댠위 표시------------------------------------------
tlq = qor1/10;
tlq1 = qor1 - (tlq * 10);
//-----------------------------------------일단위 표시------------------------------------------
dlf = tlq1/1;
//-----------------------------------------일,십,백,천 단위 GPIO reset---------------------------
HAL_GPIO_WritePin(GPIOC,S0_Pin,0);
HAL_GPIO_WritePin(GPIOC,S1_Pin,0);
HAL_GPIO_WritePin(GPIOC,S2_Pin,0);
HAL_GPIO_WritePin(GPIOC,S3_Pin,0);
//-----------------------------------------0,1,2,3,4,5,6,7,8,9 GPIO set---------------------
HAL_GPIO_WritePin(GPIOE, A_Pin|B_Pin|C_Pin|D_Pin|E_Pin|F_Pin|G_Pin, GPIO_PIN_SET);

//-----------------------------------------TIME5 counter FND 순차표시 인더럽트--------------------
if(htim->Instance == TIM5)
{
if((1CNT)|(1999>TIM3->CNT))
if(1>TIM3->CNT){TIM3->CNT = 0;}
if(1999CNT){TIM3->CNT = 1999;}
TIM2->CCR1 = TIM3->CNT;

	//if(0 == HAL_GPIO_ReadPin(GPIOA,lp1_Pin)){ipadd1 = TIM3->CNT;}

    TIM5_1000msCnt++;

    if(TIM5_1000msCnt>=4){TIM5_1000msCnt = 0;}
	{
	switch(TIM5_1000msCnt)
	{

//------------------------------------------1단위 표시-------------------------------------------

	case 0:

	//if(1 == HAL_GPIO_ReadPin(GPIOC,LP2_Pin)){HAL_GPIO_TogglePin(GPIOA,S0_Pin);}
	HAL_GPIO_WritePin(GPIOC,S0_Pin,1);
	switch (dlf)
	{
	case 0:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin ,0); // 0 0x3F
    break;
	case 1:
    HAL_GPIO_WritePin(GPIOE,C_Pin | B_Pin ,0); // 0 0x06
	break;
    case 2:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin |D_Pin| E_Pin | G_Pin ,0); // 0 0x5B
    break;
    case 3:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| G_Pin,0); // 0 0x4F
    break;
    case 4:
    HAL_GPIO_WritePin(GPIOE,B_Pin | C_Pin | F_Pin | G_Pin,0); // 0 0x66
    break;
    case 5:
    HAL_GPIO_WritePin(GPIOE,A_Pin | C_Pin |D_Pin| G_Pin | F_Pin ,0); // 0 0x6D
    break;
    case 6:
    HAL_GPIO_WritePin(GPIOE,C_Pin |D_Pin| E_Pin | F_Pin | G_Pin ,0); // 0 0x7B
    break;
    case 7:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin ,0); // 0 0x07
    break;
    case 8:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin |G_Pin,0); // 0 0x3F
    break;
    case 9:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| F_Pin |G_Pin,0); // 0 0x67
	}
    break;

//-------------------------------------------10단위 표시-------------------------------------------
case 1:

	//if(1 == HAL_GPIO_ReadPin(GPIOC,LP2_Pin)){HAL_GPIO_TogglePin(GPIOA,S1_Pin);}
	HAL_GPIO_WritePin(GPIOC,S1_Pin,1);
	switch (tlq)
	{
	case 0:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin ,0); // 0 0x3F
    break;
	case 1:
    HAL_GPIO_WritePin(GPIOE,C_Pin | B_Pin ,0); // 0 0x06
	break;
    case 2:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin |D_Pin| E_Pin | G_Pin ,0); // 0 0x5B
    break;
    case 3:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| G_Pin,0); // 0 0x4F
    break;
    case 4:
    HAL_GPIO_WritePin(GPIOE,B_Pin | C_Pin | F_Pin | G_Pin,0); // 0 0x66
    break;
    case 5:
    HAL_GPIO_WritePin(GPIOE,A_Pin | C_Pin |D_Pin| G_Pin | F_Pin ,0); // 0 0x6D
    break;
    case 6:
    HAL_GPIO_WritePin(GPIOE,C_Pin |D_Pin| E_Pin | F_Pin | G_Pin ,0); // 0 0x7B
    break;
    case 7:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin ,0); // 0 0x07
    break;
    case 8:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin |G_Pin,0); // 0 0x3F
    break;
    case 9:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| F_Pin |G_Pin,0); // 0 0x67
	}
    break;

    //-------------------------------------------100단위 표시------------------------------------------
	case 2:

	//if(1 == HAL_GPIO_ReadPin(GPIOC,LP2_Pin)){HAL_GPIO_TogglePin(GPIOA,S2_Pin);}
	HAL_GPIO_WritePin(GPIOC,S2_Pin,1);
	switch (qor)
	{
	case 0:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin ,0); // 0 0x3F
    break;
	case 1:
    HAL_GPIO_WritePin(GPIOE,C_Pin | B_Pin ,0); // 0 0x06
	break;
    case 2:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin |D_Pin| E_Pin | G_Pin ,0); // 0 0x5B
    break;
    case 3:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| G_Pin,0); // 0 0x4F
    break;
    case 4:
    HAL_GPIO_WritePin(GPIOE,B_Pin | C_Pin | F_Pin | G_Pin,0); // 0 0x66
    break;
    case 5:
    HAL_GPIO_WritePin(GPIOE,A_Pin | C_Pin |D_Pin| G_Pin | F_Pin ,0); // 0 0x6D
    break;
    case 6:
    HAL_GPIO_WritePin(GPIOE,C_Pin |D_Pin| E_Pin | F_Pin | G_Pin ,0); // 0 0x7B
    break;
    case 7:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin ,0); // 0 0x07
    break;
    case 8:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin |G_Pin,0); // 0 0x3F
    break;
    case 9:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| F_Pin |G_Pin,0); // 0 0x67
	}
    break;

//-------------------------------------------1000단위 표시-----------------------------------------
case 3:

	//if(1 == HAL_GPIO_ReadPin(GPIOC,LP2_Pin)){HAL_GPIO_TogglePin(GPIOA,S3_Pin);}
	HAL_GPIO_WritePin(GPIOC,S3_Pin,1);
	switch (cjs)
	{
	case 0:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin ,0); // 0 0x3F
    break;
	case 1:
    HAL_GPIO_WritePin(GPIOE,C_Pin | B_Pin ,0); // 0 0x06
	break;
    case 2:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin |D_Pin| E_Pin | G_Pin ,0); // 0 0x5B
    break;
    case 3:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| G_Pin,0); // 0 0x4F
    break;
    case 4:
    HAL_GPIO_WritePin(GPIOE,B_Pin | C_Pin | F_Pin | G_Pin,0); // 0 0x66
    break;
    case 5:
    HAL_GPIO_WritePin(GPIOE,A_Pin | C_Pin |D_Pin| G_Pin | F_Pin ,0); // 0 0x6D
    break;
    case 6:
    HAL_GPIO_WritePin(GPIOE,C_Pin |D_Pin| E_Pin | F_Pin | G_Pin ,0); // 0 0x7B
    break;
    case 7:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin ,0); // 0 0x07
    break;
    case 8:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| E_Pin | F_Pin |G_Pin,0); // 0 0x3F
    break;
    case 9:
    HAL_GPIO_WritePin(GPIOE,A_Pin | B_Pin | C_Pin |D_Pin| F_Pin |G_Pin,0); // 0 0x67
	}
    break;
	}
  }

}
}

/* USER CODE END 0 */

/**

  • @brief The application entry point.
  • @retval int
    /
    int main(void)
    {
    /
    USER CODE BEGIN 1 /
    uint8_t syslock = SYS_NET_LOCK;
    uint8_t i;
    /
    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_SPI2_Init();
MX_USART1_UART_Init();
MX_TIM2_Init();
MX_TIM3_Init();
MX_TIM4_Init();
MX_TIM5_Init();

/* Initialize interrupts /
MX_NVIC_Init();
/
USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_Base_Start_IT(&htim5);
HAL_UART_Receive_IT(&huart1, &rxData, 1);

printf(“< W6100EVB Web Server & Loop Back TEST!! > \r\n”);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);

BoardInitialze();

//gWIZNETINFO.ip[0] = 192;
//gWIZNETINFO.ip[1] = 168;
//gWIZNETINFO.ip[2] = 0;
//gWIZNETINFO.ip[3] = 22;

ctlwizchip(CW_SYS_UNLOCK,& syslock);
ctlnetwork(CN_SET_NETINFO,&gWIZNETINFO);

printf(“VERSION(%x) = %.2x \r\n”, VER, getVER());
print_network_information();

/* HTTP Server Initialization */
httpServer_init(TX_BUF, RX_BUF, MAX_HTTPSOCK, socknumlist); // Tx/Rx buffers (1kB) / The number of W5500 chip H/W sockets in use

/* Web content registration (web content in webpage.h, Example web pages) /
wep_define_func();
/
USER CODE END 2 */

/* Infinite loop /
/
USER CODE BEGIN WHILE /
while (1)
{
/
USER CODE END WHILE */

/* USER CODE BEGIN 3 */
//message input serial display & send tcp client message
if(URX_BUF_Flag)
{
	URX_BUF_Flag = 0;
	URX_BUF[URX_BUF_cnt] = 0;
	printf("\r\n input:%s\r\n", URX_BUF);
	if(getSn_SR(1) == SOCK_ESTABLISHED)
		send(1, URX_BUF, URX_BUF_cnt);
	URX_BUF_cnt = 0;
}

//HTTP Server
for(i = 0; i < MAX_HTTPSOCK; i++)	httpServer_run(i); 	// HTTP Server handler

//loopback server
loopback_tcps(5, data_buf, 5000, AS_IPV6);
loopback_tcps(6, data_buf, 5001, AS_IPV4);

}
/* USER CODE END 3 */
}

/**

  • @brief System Clock Configuration
  • @retval None
    */
    void SystemClock_Config(void)
    {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Initializes the CPU, AHB and APB busses clocks
/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/
* Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}

/**

  • @brief NVIC Configuration.
  • @retval None
    /
    static void MX_NVIC_Init(void)
    {
    /
    TIM5_IRQn interrupt configuration /
    HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM5_IRQn);
    /
    TIM4_IRQn interrupt configuration /
    HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM4_IRQn);
    /
    TIM3_IRQn interrupt configuration /
    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM3_IRQn);
    /
    TIM2_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
    }

/**

  • @brief SPI2 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_SPI2_Init(void)
    {

/* USER CODE BEGIN SPI2_Init 0 */

/* USER CODE END SPI2_Init 0 */

/* USER CODE BEGIN SPI2_Init 1 */

/* USER CODE END SPI2_Init 1 /
/
SPI2 parameter configuration*/
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN SPI2_Init 2 */

/* USER CODE END SPI2_Init 2 */

}

/**

  • @brief TIM2 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_TIM2_Init(void)
    {

/* USER CODE BEGIN TIM2_Init 0 */

/* USER CODE END TIM2_Init 0 */

TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};

/* USER CODE BEGIN TIM2_Init 1 */

/* USER CODE END TIM2_Init 1 /
htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 255-1;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN TIM2_Init 2 */

/* USER CODE END TIM2_Init 2 */
HAL_TIM_MspPostInit(&htim2);

}

/**

  • @brief TIM3 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_TIM3_Init(void)
    {

/* USER CODE BEGIN TIM3_Init 0 */

/* USER CODE END TIM3_Init 0 */

TIM_Encoder_InitTypeDef sConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM3_Init 1 */

/* USER CODE END TIM3_Init 1 /
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 2000;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
sConfig.IC1Filter = 0;
sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
sConfig.IC2Filter = 0;
if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN TIM3_Init 2 */

/* USER CODE END TIM3_Init 2 */

}

/**

  • @brief TIM4 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_TIM4_Init(void)
    {

/* USER CODE BEGIN TIM4_Init 0 */

/* USER CODE END TIM4_Init 0 */

TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM4_Init 1 */

/* USER CODE END TIM4_Init 1 /
htim4.Instance = TIM4;
htim4.Init.Prescaler = 72-1;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 10000-1;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN TIM4_Init 2 */

/* USER CODE END TIM4_Init 2 */

}

/**

  • @brief TIM5 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_TIM5_Init(void)
    {

/* USER CODE BEGIN TIM5_Init 0 */

/* USER CODE END TIM5_Init 0 */

TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM5_Init 1 */

/* USER CODE END TIM5_Init 1 /
htim5.Instance = TIM5;
htim5.Init.Prescaler = 72-1;
htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
htim5.Init.Period = 1000-1;
htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN TIM5_Init 2 */

/* USER CODE END TIM5_Init 2 */

}

/**

  • @brief USART1 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_USART1_UART_Init(void)
    {

/* USER CODE BEGIN USART1_Init 0 */

/* USER CODE END USART1_Init 0 */

/* USER CODE BEGIN USART1_Init 1 */

/* USER CODE END USART1_Init 1 /
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN USART1_Init 2 */

/* USER CODE END USART1_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_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, C_Pin|D_Pin|E_Pin|F_Pin
|G_Pin|A_Pin|B_Pin, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, S0_Pin|S1_Pin|S2_Pin|S3_Pin
|GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET);

/*Configure GPIO pins : C_Pin D_Pin E_Pin F_Pin
G_Pin A_Pin B_Pin */
GPIO_InitStruct.Pin = C_Pin|D_Pin|E_Pin|F_Pin
|G_Pin|A_Pin|B_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/*Configure GPIO pins : S0_Pin S1_Pin S2_Pin S3_Pin
PC6 PC8 PC9 */
GPIO_InitStruct.Pin = S0_Pin|S1_Pin|S2_Pin|S3_Pin
|GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/*Configure GPIO pins : PB1 PB8 */
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pin : PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_7;
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 BEGIN 4 */
void print_network_information(void)
{
wizchip_getnetinfo(&gWIZNETINFO);
printf(“Mac address: %02x:%02x:%02x:%02x:%02x:%02x\n\r”,gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
printf(“IP address : %d.%d.%d.%d\n\r”,gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
printf(“SN Mask : %d.%d.%d.%d\n\r”,gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
printf(“Gate way : %d.%d.%d.%d\n\r”,gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
printf(“DNS Server : %d.%d.%d.%d\n\r”,gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
printf(“LLA : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\r\n”,gWIZNETINFO.lla[0],gWIZNETINFO.lla[1],gWIZNETINFO.lla[2],gWIZNETINFO.lla[3],
gWIZNETINFO.lla[4],gWIZNETINFO.lla[5],gWIZNETINFO.lla[6],gWIZNETINFO.lla[7],
gWIZNETINFO.lla[8],gWIZNETINFO.lla[9],gWIZNETINFO.lla[10],gWIZNETINFO.lla[11],
gWIZNETINFO.lla[12],gWIZNETINFO.lla[13],gWIZNETINFO.lla[14],gWIZNETINFO.lla[15]);
printf(“GUA : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\n\r”,gWIZNETINFO.gua[0],gWIZNETINFO.gua[1],gWIZNETINFO.gua[2],gWIZNETINFO.gua[3],
gWIZNETINFO.gua[4],gWIZNETINFO.gua[5],gWIZNETINFO.gua[6],gWIZNETINFO.gua[7],
gWIZNETINFO.gua[8],gWIZNETINFO.gua[9],gWIZNETINFO.gua[10],gWIZNETINFO.gua[11],
gWIZNETINFO.gua[12],gWIZNETINFO.gua[13],gWIZNETINFO.gua[14],gWIZNETINFO.gua[15]);
printf(“SN6 : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\n\r”,gWIZNETINFO.sn6[0],gWIZNETINFO.sn6[1],gWIZNETINFO.sn6[2],gWIZNETINFO.sn6[3],
gWIZNETINFO.sn6[4],gWIZNETINFO.sn6[5],gWIZNETINFO.sn6[6],gWIZNETINFO.sn6[7],
gWIZNETINFO.sn6[8],gWIZNETINFO.sn6[9],gWIZNETINFO.sn6[10],gWIZNETINFO.sn6[11],
gWIZNETINFO.sn6[12],gWIZNETINFO.sn6[13],gWIZNETINFO.sn6[14],gWIZNETINFO.sn6[15]);
printf(“GW6 : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\r\n”,gWIZNETINFO.gw6[0],gWIZNETINFO.gw6[1],gWIZNETINFO.gw6[2],gWIZNETINFO.gw6[3],
gWIZNETINFO.gw6[4],gWIZNETINFO.gw6[5],gWIZNETINFO.gw6[6],gWIZNETINFO.gw6[7],
gWIZNETINFO.gw6[8],gWIZNETINFO.gw6[9],gWIZNETINFO.gw6[10],gWIZNETINFO.gw6[11],
gWIZNETINFO.gw6[12],gWIZNETINFO.gw6[13],gWIZNETINFO.gw6[14],gWIZNETINFO.gw6[15]);

}

void wep_define_func(void)
{
// Index page and netinfo / base64 image demo
reg_httpServer_webContent((uint8_t *)“index.html”, (uint8_t *)index_page); // index.html : Main page example
reg_httpServer_webContent((uint8_t *)“netinfo.html”, (uint8_t *)netinfo_page); // netinfo.html : Network information example page
reg_httpServer_webContent((uint8_t *)“netinfo.js”, (uint8_t *)wiz6100web_netinfo_js); // netinfo.js : JavaScript for Read Network configuration (+ ajax.js)
reg_httpServer_webContent((uint8_t *)“img.html”, (uint8_t *)img_page); // img.html : Base64 Image data example page

// Example #1
reg_httpServer_webContent((uint8_t *)"dio.html", (uint8_t *)dio_page);					// dio.html 		: Digital I/O control example page
reg_httpServer_webContent((uint8_t *)"dio.js", (uint8_t *)wiz6100web_dio_js);			// dio.js 			: JavaScript for digital I/O control 	(+ ajax.js)

// AJAX JavaScript functions
reg_httpServer_webContent((uint8_t *)"ajax.js", (uint8_t *)wiz6100web_ajax_js);			// ajax.js			: JavaScript for AJAX request transfer

}
/* 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 */

/* 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,
    tex: 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/

위에 보낸 코드는 W6100-EVB 보드에서 실행하는 코드 입니다.
W6100-EVB 에서 카운터 하나만 되게 코딩 부탁 드립니다.

안녕하세요
타이머 인터럽트를 이용한 GPIO blnk 추가 된 것입니다.

/* USER CODE BEGIN Header /
/
*


  • @file : main.c
  • @brief : Main program body

  • @attention
  • © Copyright (c) 2019 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 “loopback.h”
#include “socket.h”
#include “httpServer.h”
#include “webpage.h”
#include “board_init.h”
/
USER CODE END Includes */

/* Private typedef -----------------------------------------------------------/
/
USER CODE BEGIN PTD */
#define SOCK_TCPS 0
#define SOCK_UDPS 1
#define PORT_TCPS 5000
#define PORT_UDPS 3000

#define MAX_HTTPSOCK 4

// Addfess Family v4
#define AF_INET 2
// Addfess Family v6
#define AF_INET6 23
// Addfess Family DUAL
#define AF_INET_DUAL 11
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------/
/
USER CODE BEGIN PD /
uint8_t socknumlist[] = {0, 1, 2, 3};
uint8_t RX_BUF[DATA_BUF_SIZE];
uint8_t TX_BUF[DATA_BUF_SIZE];
uint8_t URX_BUF[DATA_BUF_SIZE];
unsigned int URX_BUF_cnt = 0;
unsigned int URX_BUF_Flag = 0;
/
USER CODE END PD */

/* Private macro -------------------------------------------------------------/
/
USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
RTC_HandleTypeDef hrtc;

SPI_HandleTypeDef hspi2;

TIM_HandleTypeDef htim3;

UART_HandleTypeDef huart1;

/* USER CODE BEGIN PV */
wiz_NetInfo gWIZNETINFO = { .mac = {0x00,0x08,0xdc,0xff,0xff,0xff},
.ip = {192,168,0,13},
.sn = {255, 255, 255, 0},
.gw = {192, 168, 0, 1},
.dns = {168, 126, 63, 1},
.lla = {0xfe,0x80, 0x00,0x00,
0x00,0x00, 0x00,0x00,
0x02,0x00, 0xdc,0xff,
0xfe,0x57, 0x57,0x62},
.gua={0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00},
.sn6={0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00, 0x00,
0x00,0x00,0x00,0x00},
.gw6={0x00, 0x00, 0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00, 0x00,0x00,
0x00,0x00, 0x00,0x00}
};

uint8_t WIZ_Dest_IP[4] = {192, 168, 0, 232}; //DST_IP Address

uint8_t DestIP6_L[16] = {0xfe,0x80, 0x00,0x00,
0x00,0x00, 0x00,0x00,
0x31,0x71,0x98,0x05,
0x70,0x24,0x4b,0xb1
};

uint8_t DestIP6_G[16] = {0x20,0x01,0x02,0xb8,
0x00,0x10,0x00,0x01,
0x31,0x71,0x98,0x05,
0x70,0x24,0x4b,0xb1
};

uint8_t Router_IP[16]= {0xff,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02
};
uint8_t data_buf[2048];
void print_network_information(void);
void wep_define_func(void);
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI2_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_RTC_Init(void);
static void MX_TIM3_Init(void);
/
USER CODE BEGIN PFP */
uint8_t rxData;

// Using printf Function
int _write(int fd, char *str, int len)
{
for(int i=0; i<len; i++)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&str[i], 1, 0xFFFF);
}
return len;
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {

/*
    This will be called once data is received successfully,
    via interrupts.
*/

 /*
   loop back received data
 */
 HAL_UART_Receive_IT(&huart1, &rxData, 1);
 HAL_UART_Transmit(&huart1, &rxData, 1, 1000);
 //massage input end enter key flag
 URX_BUF[URX_BUF_cnt++] = rxData;
 if((rxData == '\r') ||(URX_BUF_cnt > DATA_BUF_SIZE))
 {
	 URX_BUF_Flag = 1;
 }

}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef htim)
{
if(htim->Instance == TIM3)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
}
}
/
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 /
    uint8_t syslock = SYS_NET_LOCK;
    uint8_t i;
    /
    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_SPI2_Init();
MX_USART1_UART_Init();
MX_RTC_Init();
MX_TIM3_Init();
/
USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1, &rxData, 1);

printf(“< W6100EVB Web Server & Loop Back TEST!! > \r\n”);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);

HAL_TIM_Base_Start_IT(&htim3);
BoardInitialze();

ctlwizchip(CW_SYS_UNLOCK,& syslock);
ctlnetwork(CN_SET_NETINFO,&gWIZNETINFO);

printf(“VERSION(%x) = %.2x \r\n”, VER, getVER());
print_network_information();

/* HTTP Server Initialization */
httpServer_init(TX_BUF, RX_BUF, MAX_HTTPSOCK, socknumlist); // Tx/Rx buffers (1kB) / The number of W5500 chip H/W sockets in use

/* Web content registration (web content in webpage.h, Example web pages) */
wep_define_func();

/* USER CODE END 2 */

/* Infinite loop /
/
USER CODE BEGIN WHILE /
while (1)
{
/
USER CODE END WHILE */

/* USER CODE BEGIN 3 */
//message input serial display & send tcp client message
if(URX_BUF_Flag)
{
	URX_BUF_Flag = 0;
	URX_BUF[URX_BUF_cnt] = 0;
	printf("\r\n input:%s\r\n", URX_BUF);
	if(getSn_SR(1) == SOCK_ESTABLISHED)
		send(1, URX_BUF, URX_BUF_cnt);
	URX_BUF_cnt = 0;
}

//HTTP Server
for(i = 0; i < MAX_HTTPSOCK; i++)	httpServer_run(i); 	// HTTP Server handler

//loopback server
loopback_tcps(5, data_buf, 5000, AS_IPV6);
loopback_tcps(6, data_buf, 5001, AS_IPV4);

}
/* USER CODE END 3 */
}

/**

  • @brief System Clock Configuration
  • @retval None
    */
    void SystemClock_Config(void)
    {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

/** Initializes the CPU, AHB and APB busses clocks
/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/
* Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
}

/**

  • @brief RTC Initialization Function
  • @param None
  • @retval None
    */
    static void MX_RTC_Init(void)
    {

/* USER CODE BEGIN RTC_Init 0 */

/* USER CODE END RTC_Init 0 */

RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef DateToUpdate = {0};

/* USER CODE BEGIN RTC_Init 1 */

/* USER CODE END RTC_Init 1 /
/
* Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}

/* USER CODE BEGIN Check_RTC_BKUP */

/* USER CODE END Check_RTC_BKUP */

/** Initialize RTC and set the Time and Date
*/
sTime.Hours = 0x0;
sTime.Minutes = 0x0;
sTime.Seconds = 0x0;

if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
DateToUpdate.Month = RTC_MONTH_JANUARY;
DateToUpdate.Date = 0x1;
DateToUpdate.Year = 0x0;

if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN RTC_Init 2 */

/* USER CODE END RTC_Init 2 */

}

/**

  • @brief SPI2 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_SPI2_Init(void)
    {

/* USER CODE BEGIN SPI2_Init 0 */

/* USER CODE END SPI2_Init 0 */

/* USER CODE BEGIN SPI2_Init 1 */

/* USER CODE END SPI2_Init 1 /
/
SPI2 parameter configuration*/
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN SPI2_Init 2 */

/* USER CODE END SPI2_Init 2 */

}

/**

  • @brief TIM3 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_TIM3_Init(void)
    {

/* USER CODE BEGIN TIM3_Init 0 */

/* USER CODE END TIM3_Init 0 */

TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_SlaveConfigTypeDef sSlaveConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM3_Init 1 */

/* USER CODE END TIM3_Init 1 /
htim3.Instance = TIM3;
htim3.Init.Prescaler = 18000-1;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 499;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_DISABLE;
sSlaveConfig.InputTrigger = TIM_TS_ITR0;
if (HAL_TIM_SlaveConfigSynchronization(&htim3, &sSlaveConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN TIM3_Init 2 */

/* USER CODE END TIM3_Init 2 */

}

/**

  • @brief USART1 Initialization Function
  • @param None
  • @retval None
    */
    static void MX_USART1_UART_Init(void)
    {

/* USER CODE BEGIN USART1_Init 0 */

/* USER CODE END USART1_Init 0 */

/* USER CODE BEGIN USART1_Init 1 */

/* USER CODE END USART1_Init 1 /
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/
USER CODE BEGIN USART1_Init 2 */

/* USER CODE END USART1_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_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET);

/*Configure GPIO pins : PB1 PB8 */
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pins : PC6 PC8 PC9 */
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/*Configure GPIO pin : PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_7;
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 BEGIN 4 */
void print_network_information(void)
{
wizchip_getnetinfo(&gWIZNETINFO);
printf(“Mac address: %02x:%02x:%02x:%02x:%02x:%02x\n\r”,gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
printf(“IP address : %d.%d.%d.%d\n\r”,gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
printf(“SN Mask : %d.%d.%d.%d\n\r”,gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
printf(“Gate way : %d.%d.%d.%d\n\r”,gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
printf(“DNS Server : %d.%d.%d.%d\n\r”,gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
printf(“LLA : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\r\n”,gWIZNETINFO.lla[0],gWIZNETINFO.lla[1],gWIZNETINFO.lla[2],gWIZNETINFO.lla[3],
gWIZNETINFO.lla[4],gWIZNETINFO.lla[5],gWIZNETINFO.lla[6],gWIZNETINFO.lla[7],
gWIZNETINFO.lla[8],gWIZNETINFO.lla[9],gWIZNETINFO.lla[10],gWIZNETINFO.lla[11],
gWIZNETINFO.lla[12],gWIZNETINFO.lla[13],gWIZNETINFO.lla[14],gWIZNETINFO.lla[15]);
printf(“GUA : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\n\r”,gWIZNETINFO.gua[0],gWIZNETINFO.gua[1],gWIZNETINFO.gua[2],gWIZNETINFO.gua[3],
gWIZNETINFO.gua[4],gWIZNETINFO.gua[5],gWIZNETINFO.gua[6],gWIZNETINFO.gua[7],
gWIZNETINFO.gua[8],gWIZNETINFO.gua[9],gWIZNETINFO.gua[10],gWIZNETINFO.gua[11],
gWIZNETINFO.gua[12],gWIZNETINFO.gua[13],gWIZNETINFO.gua[14],gWIZNETINFO.gua[15]);
printf(“SN6 : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\n\r”,gWIZNETINFO.sn6[0],gWIZNETINFO.sn6[1],gWIZNETINFO.sn6[2],gWIZNETINFO.sn6[3],
gWIZNETINFO.sn6[4],gWIZNETINFO.sn6[5],gWIZNETINFO.sn6[6],gWIZNETINFO.sn6[7],
gWIZNETINFO.sn6[8],gWIZNETINFO.sn6[9],gWIZNETINFO.sn6[10],gWIZNETINFO.sn6[11],
gWIZNETINFO.sn6[12],gWIZNETINFO.sn6[13],gWIZNETINFO.sn6[14],gWIZNETINFO.sn6[15]);
printf(“GW6 : %.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X:%.2X%.2X\r\n”,gWIZNETINFO.gw6[0],gWIZNETINFO.gw6[1],gWIZNETINFO.gw6[2],gWIZNETINFO.gw6[3],
gWIZNETINFO.gw6[4],gWIZNETINFO.gw6[5],gWIZNETINFO.gw6[6],gWIZNETINFO.gw6[7],
gWIZNETINFO.gw6[8],gWIZNETINFO.gw6[9],gWIZNETINFO.gw6[10],gWIZNETINFO.gw6[11],
gWIZNETINFO.gw6[12],gWIZNETINFO.gw6[13],gWIZNETINFO.gw6[14],gWIZNETINFO.gw6[15]);

}

void wep_define_func(void)
{
// Index page and netinfo / base64 image demo
reg_httpServer_webContent((uint8_t *)“index.html”, (uint8_t *)index_page); // index.html : Main page example
reg_httpServer_webContent((uint8_t *)“netinfo.html”, (uint8_t *)netinfo_page); // netinfo.html : Network information example page
reg_httpServer_webContent((uint8_t *)“netinfo.js”, (uint8_t *)wiz6100web_netinfo_js); // netinfo.js : JavaScript for Read Network configuration (+ ajax.js)
reg_httpServer_webContent((uint8_t *)“img.html”, (uint8_t *)img_page); // img.html : Base64 Image data example page

// Example #1
reg_httpServer_webContent((uint8_t *)"dio.html", (uint8_t *)dio_page);					// dio.html 		: Digital I/O control example page
reg_httpServer_webContent((uint8_t *)"dio.js", (uint8_t *)wiz6100web_dio_js);			// dio.js 			: JavaScript for digital I/O control 	(+ ajax.js)

// AJAX JavaScript functions
reg_httpServer_webContent((uint8_t *)"ajax.js", (uint8_t *)wiz6100web_ajax_js);			// ajax.js			: JavaScript for AJAX request transfer

}
/* 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 */

/* 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,
    tex: 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/

1 Like

대단히 감사합니다.
앞으로 잘 부탁 드립니다.

지금까지는 저희 칩과 관련 되지 않는 부분에 대하여 지원을 해드렸지만
앞으로는 저희 칩과 관련되지 않은 부분에 대하여는 유상으로 지원이 가능할 것 같습니다.
감사합니다.

유상 이라면 그 금액이 얼마나 됩니까.

안녕하세요
개발용역에 관련 문의는 김연섭 이사님께 문의 하시기 바랍니다.
Email : jameskim@wiznet.io
감사합니다.

안녕하세요

Module IP 적는 부분에 192,168,0,13으로하셨는데 ,가 아닌 .으로 적으셔야 합니다.

1 Like

마지막 ip 다른 숫자해도 마찬가지 입니다.

Hercules에서 module ip에 쉼표가 아닌 마침표로 적으셔야합니다.

1 Like

아 ! 마침표 감사합니다.
여기서는 ip 재 설정하는 부분은 어디 있습니까.

안녕하세요.
IP 재설정이라는거 어떤걸 얘기하시는걸까요?

감사합니다.
irina

안녕하세요.

ip 192.168.0.13 을 192.168.0.20 으로 설정하는 것을 말하는 것입니다.잘 됩니다.

감사합니다.