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();
}
}
이미지 한장 출력하는데 10m가 소요되고 있다. (STM32F405 에서는 7ms 정도 소요 된다.)
왜 STM32F439가 더 느리지? STM32F4에서 TFT-LCD 테스트와 동일한 클럭 속도 인데...
가장 기본 적인 LCD출력으로 파형을 관찰 해 볼까?
}
STM32F439 FMC 이용 LCD출력 테스트 결과