본문 바로가기

[ST_MICRO]/STM32F43x

STM32F439 이더넷 TCP/IP 전송 속도 테스트 - STM32CubeMx Hal코드 이용

 

STM32F439에 내장된 이더넷을 연결할 수 있는 MAC가 포함되어 있고 Ethernet Phy 칩만 연결하면 쉽게 이더넷을 연결 할수 있다.

이번에는 STM32CubeMx를 이용하여 아주 간단하게 LwIP TCP / IP 스택을 올려서 테스트 해보았다.

 

STM32F439 EVM 보드는 이더넷 Phy 칩을 연결하면 STM32F4의 이더넷을 테스트 할 수 있다.

이더넷 Phy는 칩을 직접 납땜하거나 Ethernet Phy 모듈을 연결 할 수 있다.

Ethernet Phy 모듈은 핀맵을 표준화 해서 다양한 종류의 Ehternet Phy 칩을 테스트 할 수 있다.

 

 

 

STM32CubeMx 를 이용하여 이더넷 인터페이스를 설정한다.

Ethernet PHY는 RMII 모드로 연결되어 있기 때문에 모드를 RMII로 선택해 준다.

 

 

 

Middleware 탭에서 LWIP 설정을 해 준다. 디폴트 옵션을 사용하면 된다.

 

 

클럭은 보드에 맞게 설정해 준다.

 

 

 

 

STM32F439 LWIP 를 이용한 TCP/IP loopback 테스트 코드

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_USART1_UART_Init();
  sprintf(buf, "STM32 ETHERNET TEST: Clk=%d\r\n", HAL_RCC_GetHCLKFreq()/1000);
  HAL_UART_Transmit(&huart1, buf, strlen(buf), 10);
  MX_LWIP_Init();
  while((gnetif.ip_addr.addr) == 0)
  {
         MX_LWIP_Process();
  }
  /* USER CODE BEGIN 2 */
  print_ip_settings(&gnetif.ip_addr.addr, &gnetif.netmask.addr, &gnetif.gw.addr);
  /* USER CODE END 2 */
  //User_notification(&gnetif);
  tcp_echoserver_init();
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
           ethernetif_input(&gnetif);
           /* Handle timeouts */
           sys_check_timeouts();
  }
  /* USER CODE END 3 */

}

 

 

STM32F439 Ehernet TCP/IP 전송 속도 테스결과

32Mbps 로 측정되며 STM32F439 + W5300 이더넷 전송 속도 테스트결과와 비교하면 3배 정도 느린것 같다. 

하지만 초당 4Mbyte 이면 나쁘지 않은것 같다.