[ST_MICRO]/STM32F43x2017. 7. 19. 06:06

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 이면 나쁘지 않은것 같다.

 

Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2014. 9. 7. 22:11

STM32F429 - W5300 을 이용한 TCP/IP 전송 속도 테스트

STM32F429 - W5300 을 이용한 TCP/IP 전송 속도 테스트



STM32F429 는 최대 180Mhz로 구동된다. W5300을 이용하여 TCP/IP 전송 속도 테스트 결과 37Mbps 정도로 측정된다.





STM32F4의 FMC 타이밍을 좀더 짧게 설정하니 속도가 2.5배 이상 상승한다.

90Mbs로 거의 최대 속도가 나오는것같다.





STM32F439 W5300 FMC초기화 코드


void InitFMC_W5300(void)

{


  GPIO_InitTypeDef GPIO_Init_Structure;

  

  hsram.Instance  = FMC_NORSRAM_DEVICE;

  hsram.Extended  = FMC_NORSRAM_EXTENDED_DEVICE;

  


  SRAM_Timing.AddressSetupTime       = 2;

  SRAM_Timing.AddressHoldTime        = 2;

  SRAM_Timing.DataSetupTime          = 4;

  SRAM_Timing.BusTurnAroundDuration  = 3;

  SRAM_Timing.CLKDivision            = 2;

  SRAM_Timing.DataLatency            = 2;


/*

  SRAM_Timing.AddressSetupTime       = 10;

  SRAM_Timing.AddressHoldTime        = 10;

  SRAM_Timing.DataSetupTime          = 25;

  SRAM_Timing.BusTurnAroundDuration  = 8;

  SRAM_Timing.CLKDivision            = 2;

  SRAM_Timing.DataLatency            = 4;

*/

  SRAM_Timing.AccessMode             = FMC_ACCESS_MODE_A;

  

  hsram.Init.NSBank             = FMC_NORSRAM_BANK3;

  hsram.Init.DataAddressMux     = FMC_DATA_ADDRESS_MUX_DISABLE;

  hsram.Init.MemoryType         = FMC_MEMORY_TYPE_SRAM;

  hsram.Init.MemoryDataWidth    = SRAM_MEMORY_WIDTH;

  hsram.Init.BurstAccessMode    = FMC_BURST_ACCESS_MODE_DISABLE;

  hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;

  hsram.Init.WrapMode           = FMC_WRAP_MODE_DISABLE;

  hsram.Init.WaitSignalActive   = FMC_WAIT_TIMING_BEFORE_WS;

  hsram.Init.WriteOperation     = FMC_WRITE_OPERATION_ENABLE;

  hsram.Init.WaitSignal         = FMC_WAIT_SIGNAL_DISABLE;

  hsram.Init.ExtendedMode       = FMC_EXTENDED_MODE_DISABLE;

  hsram.Init.AsynchronousWait   = FMC_ASYNCHRONOUS_WAIT_DISABLE;

  hsram.Init.WriteBurst         = FMC_WRITE_BURST_DISABLE;

  hsram.Init.ContinuousClock    = SRAM_CONTINUOUS_CLOCK;

  

  /* Initialize the SRAM controller */

  if(HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing) != HAL_OK)

  {

    /* Initialization Error */

    Error_Handler(); 

  }


}





STM32F429 W5300 드라이버 코드

//-----------------------------------------------------------------------------

#define W5300_BANK_ADDR                 ((uint32_t)0x64000000)

#define W5300_DATA_ADDR                 (*(uint16_t *) (W5300_BANK_ADDR))

                                        

#define _W5300_DATA(p)                    (*(__IO uint16_t*) (W5300_BANK_ADDR + (p<<1)))


#define W5300_RST_PORT GPIOA

#define W5300_RST_BIT BIT9


#define IINCHIP_RSToff() cbi(W5300_RST_PORT, W5300_RST_BIT)

#define IINCHIP_RSTon() sbi(W5300_RST_PORT, W5300_RST_BIT)



#define W5300_IO_INIT()

//-----------------------------------------------------------------------------




Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42014. 6. 17. 00:16

STM32F4 타이머 인터럽트 테스트 - 1초 만들기


STM32F4 타이머 인터럽트 테스트



STM32F4에서 TIM2, TIM5는 32bit 타이머 모드를 지원한다. 이를 이용하여 1초 만들기 테스트를 해 보았다.




STM32F4 타이머 인터럽트 초기화 함수

void TimerInit2(void)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_OCInitTypeDef  TIM_OCInitStructure;


    uint16_t PrescalerValue = 0;


    NVIC_InitTypeDef NVIC_InitStructure;


    /* TIM2 clock enable */

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);


    /* TIM2 gloabal Interrupt 초기화 */

    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);


    //--------------------------------------------------------------------------

    /* Compute the prescaler value */

    PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 6000000) - 1; 


    /* Time base configuration */

    TIM_TimeBaseStructure.TIM_Period = (6000-1);   //Autoreload value (ARR) -> 1ms

    TIM_TimeBaseStructure.TIM_Prescaler = (6000-1);

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


    /* Prescaler configuration */

    TIM_PrescalerConfig(TIM2, PrescalerValue, TIM_PSCReloadMode_Immediate);



    /* TIM Interrupts enable */

    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);


    /* TIM2 enable counter */

    TIM_Cmd(TIM2, ENABLE);

    //--------------------------------------------------------------------------    

}




STM32F4 타이머 인터럽트 핸들러

void TIM2_IRQHandler(void)

{

if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)

{

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

        Led2Toggle();

}  

}




Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2013. 9. 26. 19:13

STM32F439 보드 테스트 - 주의사항

STM32F439 보드 테스트 - 주의사항




STM32F439 보드 제작해서 연결했는데 쇼트가 발생한다.
데이터 시트를 보니 STM32F4와는 좀더 다른점이 있다. STM32F4데이터 시트에는 99번핀이 VDD or VSS라 되어 있는데...
STM32F439에는 VSS로 되어 있다. (주의할 필요가 있다.)
 

STM32F4x







STM32F439


Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2013. 8. 9. 18:02

CortexM4 STM32F439 출시

CortexM4 STM32F439 출시

ST사의 새로운 CortexM4인 STM32F439가 출시되었다.

시스템 클럭이 160Mhz에서 180Mhz로 올랐고 플래시 메모리도 2M, SRAM도 256K로 성능이 업그레이드 되었다.


그리고 가장큰 특징으로 TFT LCD Controller가 추가되었다.

SPI도 클럭과 채널이 6채널로 업되었다. SAI도 추가되었다.

아무튼 이정도면 최고 사양인듯하다.


- 180 MHz ( 225 DMIPS)

- 2 MB of Flash memory

- 256+4 KB of SRAM

LCD-TFT controller

 up to SVGA resolution with dedicated Chrom-ART Accelerator™ for enhanced graphic content creation (DMA2D)

3 SPIs (37.5 Mbits/s), Up to 6 SPIs (45 Mbits/s)

1 x SAI (serial audio interface)




Posted by nexp

댓글을 달아 주세요