'TM32F439_STUDY'에 해당되는 글 1건

  1. 2015.03.08 STM32F439 EVM - FMC SRAM 방식의 FTF LCD 제어 테스트
[ST_MICRO]/STM32F43x2015. 3. 8. 21:30

STM32F439 EVM - FMC SRAM 방식의 FTF LCD 제어 테스트

STM32F439 EVM - FMC SRAM 방식의 FTF LCD 제어 테스트





STM32F4는 FSMC(Flexible static memory controller)를 지원하는데 STMF439에서는 SDRAM을 지원하기 위해 FMC (Flexible memory controller )로 변경되었다. 

기존 프로그램에서 FMC를 이용하여 메모리 방식으로 LCD제어 하기 위해서는 코드 수정이 필요하다.



STM32F439 FMC 블록도

NOR,SRAM, SDRAM 을 지원한다.

- NOR/PSRAM memory controller

- NAND/PC Card memory controller

- Synchronous DRAM (SDRAM/Mobile LPSDR SDRAM) controller










[STM32F439 EV] 보드에서는 메모리 방식의 TFT-LCD는 CN26을 통해 연결되어 있고 PG9->FMC_NE2/FMC_NCE3 에 CS를 할당하였다.


FMC 어드레스 할당 핀맵

(BANK1)CS1 -> PD7    : ((uint32_t)0x60000000) 

(BANK2)CS2 -> PG9    : ((uint32_t)0x64000000) 

(BANK3)CS3 -> PG10   : ((uint32_t)0x68000000)

(BANK4)CS4 -> PG12   : ((uint32_t)0x6C000000)








STM32F439 TFT LCD FMC초기화 코드


void InitFMC_TftLcd(void)

{

  GPIO_InitTypeDef GPIO_Init_Structure;

 

  dio_fmc.Instance  = FMC_NORSRAM_DEVICE;

  dio_fmc.Extended  = FMC_NORSRAM_EXTENDED_DEVICE;

  

 

  SRAM_Timing.AddressSetupTime       = 5;

  SRAM_Timing.AddressHoldTime        = 5;

  SRAM_Timing.DataSetupTime          = 5;

  SRAM_Timing.BusTurnAroundDuration  = 2;

  SRAM_Timing.CLKDivision            = 2;

  SRAM_Timing.DataLatency            = 2; 

 

  SRAM_Timing.AccessMode             = FMC_ACCESS_MODE_A;

  

//뱅크 선택 FMC_NORSRAM_BANK1~FMC_NORSRAM_BANK4

  dio_fmc.Init.NSBank             = FMC_NORSRAM_BANK2;

  dio_fmc.Init.DataAddressMux     = FMC_DATA_ADDRESS_MUX_DISABLE;//FMC_DATA_ADDRESS_MUX_ENABLE

  dio_fmc.Init.MemoryType         = FMC_MEMORY_TYPE_SRAM;

  dio_fmc.Init.MemoryDataWidth    = SRAM_MEMORY_WIDTH;

  dio_fmc.Init.BurstAccessMode    = FMC_BURST_ACCESS_MODE_DISABLE;

  dio_fmc.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;

  dio_fmc.Init.WrapMode           = FMC_WRAP_MODE_DISABLE;

  dio_fmc.Init.WaitSignalActive   = FMC_WAIT_TIMING_BEFORE_WS;

  dio_fmc.Init.WriteOperation     = FMC_WRITE_OPERATION_ENABLE;

  dio_fmc.Init.WaitSignal         = FMC_WAIT_SIGNAL_DISABLE;

  dio_fmc.Init.ExtendedMode       = FMC_EXTENDED_MODE_DISABLE;

  dio_fmc.Init.AsynchronousWait   = FMC_ASYNCHRONOUS_WAIT_DISABLE;

  dio_fmc.Init.WriteBurst         = FMC_WRITE_BURST_DISABLE;

  dio_fmc.Init.ContinuousClock    = SRAM_CONTINUOUS_CLOCK;

  

  /* Initialize the SRAM controller */

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

  {

    /* Initialization Error */

    Error_Handler(); 

  }

      

}



Posted by nexp

댓글을 달아 주세요