cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F746 - Problems with FMC

mwp
Senior
Posted on April 16, 2016 at 11:10

Hi all,

I'm trying to use a LCD via the FMC, but as yet i haven't been able to get any output from the FMC module at all. Using normal GPIO pin writes works just fine. Im using this test code to diagnose the issue. As far as i can tell, i should be seeing activity on the FMC pins, but im getting nothing at all. Any ideas??


__FMC_CLK_ENABLE();

__HAL_RCC_GPIOE_CLK_ENABLE();

__HAL_RCC_GPIOD_CLK_ENABLE();


GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10

| GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14

| GPIO_PIN_15;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF12_FMC;

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);


GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11

| GPIO_PIN_14 | GPIO_PIN_15 | GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4

| GPIO_PIN_5 | GPIO_PIN_7;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF12_FMC;

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);


FMC_NORSRAM_TimingTypeDef Timing;

FMC_NORSRAM_TimingTypeDef ExtTiming;


hsram1.Instance = FMC_NORSRAM_DEVICE;

hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;

/* hsram1.Init */

hsram1.Init.NSBank = FMC_NORSRAM_BANK1;

hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;

hsram1.Init.MemoryType = 
FMC_MEMORY_TYPE_SRAM;

hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;

hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;

hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;

hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;

hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;

hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;

hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; 
//FMC_EXTENDED_MODE_ENABLE;

hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;

hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;

hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;

hsram1.Init.WriteFifo = FMC_WRITE_FIFO_DISABLE;

hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;

/* Timing */

Timing.AddressSetupTime = 15;

Timing.AddressHoldTime = 15;

Timing.DataSetupTime = 255;

Timing.BusTurnAroundDuration = 15;

Timing.CLKDivision = 16;

Timing.DataLatency = 17;

Timing.AccessMode = FMC_ACCESS_MODE_A;

/* ExtTiming */

ExtTiming.AddressSetupTime = 15;

ExtTiming.AddressHoldTime = 15;

ExtTiming.DataSetupTime = 255;

ExtTiming.BusTurnAroundDuration = 15;

ExtTiming.CLKDivision = 16;

ExtTiming.DataLatency = 17;

ExtTiming.AccessMode = FMC_ACCESS_MODE_A;

HAL_SRAM_Init(&hsram1, &Timing, &ExtTiming);


while
(1)

{

*(
volatile
uint16_t*)(0x60000000) = 0b0101010101010101;

HAL_Delay(10);

HAL_GPIO_TogglePin(LCD_BL_GPIO_Port, LCD_BL_Pin);


*(
volatile
uint16_t*)(0x60000000) = 0b1010101010101010;

HAL_Delay(10);

HAL_GPIO_TogglePin(LCD_BL_GPIO_Port, LCD_BL_Pin);

}

#stm32f7-fmc
3 REPLIES 3
mwp
Senior
Posted on April 26, 2016 at 09:10

Anyone?

I still haven't had any luck with this.

Thanks.
AndyJT
Associate III
Posted on April 26, 2016 at 11:33

If I were you I'd take a close look at the BSP  ile: ..STM32Cube_FW_F7_V1.3.0\Drivers\BSP\STM32756G_EVAL\stm32756g_eval_sdram.c

When using HAL I think it's better to configure the pins with the weak MspInit functions which are normally called from within the HAL initialise procedures at the correct time.

gvigelet
Associate II
Posted on July 12, 2016 at 05:40

Try setting the memory protection on the address and it should start working as long as the timing is correct, I was seeing weird issues with the FMC hooked up to a SSD1289 that worked fine on the FSMC, after protecting the memory region that the display was mapped to it started working.