[ST_MICRO]/STM32F42017. 1. 12. 00:46

[STM32F4_ZE_NET] FSMC 테스트 - W5300 이더넷 전송 속도 테스트

[STM32F4_ZE_NET] FSMC 테스트 - W5300 이더넷 전송 속도 테스트





[STM32F4_ZE_EVM] 보드는 FSMC에 Hardwired TCP/IP 칩인 W5300 모듈을 연결할 수 있다.

STM32F405도 MII(RMII) 이더넷 인터페이스가 있긴하지만 이더넷 전송속를 높일 수 있는 W5300을 이용하여 TCP/IP 전송율을 테스트 해 보자


[STM32F4_ZE_EVM] 보드에 STM32F405 FSMC NE2(PG9)에 CS가 연결되어 있고 Data Bus는 16bit 모드 이다.





기본 설정을 이용하여 STM32F405에서 W5300 TCP 루프백 전송율을 테스트 해본 결과 5Mbps 정도 측정이 된다.

이때 CS 타임이 1.6us 정도 이다.


/CS time -> 1.6us


  SRAM_Timing.AddressSetupTime       = 15;

  SRAM_Timing.AddressHoldTime        = 15;

  SRAM_Timing.DataSetupTime          = 255;

  SRAM_Timing.BusTurnAroundDuration  = 15;

  SRAM_Timing.CLKDivision            = 16;

  SRAM_Timing.DataLatency            = 17;





타이미을 최대한 짧게 설정하여 테스트 해보자.

동작하는 범위에서 최대로 짧게 설정하니 40ns 정도 되고 TCP 루프백 전송율은 90Mbps 정도로 출력된다.


다른 MCU에서 W5300 TCP전송율 테스트 결과와 비교해 보면 100M 이더넷에서 거의 최대 치로 출력되는것 같다.



/CS time -> 40ns


  SRAM_Timing.AddressSetupTime       = 2;

  SRAM_Timing.AddressHoldTime        = 2;

  SRAM_Timing.DataSetupTime          = 4;

  SRAM_Timing.BusTurnAroundDuration  = 3;

  SRAM_Timing.CLKDivision            = 2;

  SRAM_Timing.DataLatency            = 2;





Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42015. 6. 29. 14:14

[STM32F4_ZE_NET] FSMC 테스트 - TFT LCD 출력 테스트


[STM32F4_ZE_NET] FSMC 테스트 - TFT LCD 출력 테스트





STM32F4의 FSMC를 이용하면 TFT-LCD를 버스 방식으로 제어 가능하다.


STM32F4의 FSMC는 4개의 64MB로 할당 가능하다.






STM32F405 FSMC 블록도





STM32F405 FSMC 테스트 초기화 코드


초기화 코드

#define LCD_BANK_ADDR                   ((uint32_t)0x6C000000)
#define _LCD_CMD_OUT(Data)              (*(uint16_t *) (LCD_BANK_ADDR) = Data)
#define _LCD_DAT_OUT(Data)              (*(uint16_t *) (LCD_BANK_ADDR) = Data)
#define _LCD_DATA(p)                    (*(volatile uint16_t*) (LCD_BANK_ADDR + (p<<1)))

#define Lcd_Cmd(reg)                    _LCD_DATA(0x0000) = reg;

#define Lcd_Data(dat)                   _LCD_DATA(0x0002) = dat;




테스트 코로 테스트 해 보면 CMD출력 할때 RS(A1)가 low가 되는것을 확인 할 수 있다.

       while(1)
       {
              Lcd_Cmd(0x0200);Lcd_Data(0x0000);
              Lcd_Cmd(0x0201);Lcd_Data(0x0000);
              Delay(delay_time);
       }







/CS와 /WR 신호를 확인 해 보면 4개의 /CS,/RS가 출력 되는것을 확인 할 수 있다.

타이밍을 최적화 해 보면 300ns 내에 4개의 명령이 수행 되는것을 확인 할 수 있다.

  /* Timing */
  Timing.AddressSetupTime = 4;
  Timing.AddressHoldTime = 4;
  Timing.DataSetupTime = 8;
  Timing.BusTurnAroundDuration = 6;
  Timing.CLKDivision = 2;
  Timing.DataLatency = 2;




LCD에 이미지 한장 출력하는데 7.5ms 정도 소요된다.






TFT-LCD에 BMP 파일 출력 해보면 정상 적으로 잘 출력 되는것을 확인 할 수 있다.








Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42014. 12. 15. 18:17

STM32F4 UART interrupt 테스트

STM32F4 UART interrupt 테스트



void U0_SetInt(void)

{

    /* NVIC for USART1 */

    HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);

    HAL_NVIC_EnableIRQ(USART1_IRQn);

    

      /* Enable the UART Data Register not empty Interrupt */

    __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE);

}




void USART1_IRQHandler(void)

{

    U0_PutByte(U0_GetByte());

}


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]/STM32F42014. 1. 5. 15:56

STM32F429I-DISCO - STM32F4, DISCOVERY, EVAL BOARD


STM32F429I-DISCO - STM32F4, DISCOVERY, EVAL BOARD


http://kr.element14.com/stmicroelectronics/stm32f429i-disco/stm32f4-discovery-eval-board/dp/2355377?in_merch=New%20Products

Posted by nexp

댓글을 달아 주세요