This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

FMC problem

Hello Every one,

I am starting a new project and I am using the FMC peripheral in order to communicate with a LCD TFT. I have configured the pins in the STM32cube mx ,and checked on my board the pins to be connected to the LCD (16 bit MCU).
I am using a STM32f429 VET processor with Keil MDk5 version. The problem seems unexplained and weird, because I am trying to write data on the FMC ports and I don't receive anything. I used a software (using normal GPIO) to interface with the LCD and it works ,but using the Keil function "HAL_SRAM_Write_16b(&hsram1,&adr,&Data,1)" doesn't give me any results.
I have checked the configuration and added the Pins with the alternate function mode and the alternate function FMC. Here is my configuration :

hsram1.Instance = FMC_NORSRAM_DEVICE; hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE; /* hsram1.Init */ ////////////////////////////////////////////////////////// __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE();

GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = FMC_D4_Pin|FMC_D5_Pin|FMC_D6_Pin|FMC_D7_Pin|FMC_D8_Pin|FMC_D9_Pin|FMC_D10_Pin|FMC_D11_Pin|FMC_D12_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate=GPIO_AF12_FMC; HAL_GPIO_Init(FMC4_12_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = FMC_D0_Pin|FMC_D1_Pin|FMC_D2_Pin|FMC_D3_Pin|FMC_D13_Pin|FMC_D14_Pin|FMC_D15_Pin|FMC_NWE_Pin|FMC_NOE_Pin|FMC_A16_Pin|FMC_NE1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate=GPIO_AF12_FMC; HAL_GPIO_Init(FMC0_15_GPIO_Port, &GPIO_InitStruct);

/////////////////////////////////////////////////////////////

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.WrapMode = FMC_WRAP_MODE_DISABLE; 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; hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE; hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY; hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE; /* Timing */ Timing.AddressSetupTime = 1 ;//15; Timing.AddressHoldTime = 1 ;//15; Timing.DataSetupTime = 3 ;//255; Timing.BusTurnAroundDuration = 0 ;//15; Timing.CLKDivision = 1 ;//16; Timing.DataLatency =0 ;//17; Timing.AccessMode = FMC_ACCESS_MODE_A; /* ExtTiming */

if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK) { Error_Handler(); }

my normal code is :
SRAM_HandleTypeDef hsram1;

while (1) {

uint32_t adr=0x00; uint16_t Data=0xFFFF; HAL_SRAM_Write_16b(&hsram1,&adr,&Data,1); delayms(1); adr=0x00; Data=0x00; HAL_SRAM_Write_16b(&hsram1,&adr,&Data,1); delayms(1);

/* USER CODE BEGIN 3 */

}

my port definition :
#define FMC_D4_Pin GPIO_PIN_7
#define FMC_D5_Pin GPIO_PIN_8
#define FMC_D6_Pin GPIO_PIN_9
#define FMC_D7_Pin GPIO_PIN_10
#define FMC_D8_Pin GPIO_PIN_11
#define FMC_D9_Pin GPIO_PIN_12
#define FMC_D10_Pin GPIO_PIN_13
#define FMC_D11_Pin GPIO_PIN_14
#define FMC_D12_Pin GPIO_PIN_15
#define FMC4_12_GPIO_Port GPIOE
#define FMC_D0_Pin GPIO_PIN_14
#define FMC_D1_Pin GPIO_PIN_15
#define FMC_D2_Pin GPIO_PIN_0
#define FMC_D3_Pin GPIO_PIN_1
#define FMC_D13_Pin GPIO_PIN_8
#define FMC_D14_Pin GPIO_PIN_9
#define FMC_D15_Pin GPIO_PIN_10
#define FMC_NWE_Pin GPIO_PIN_5
#define FMC_NOE_Pin GPIO_PIN_4
#define FMC_NE1_Pin GPIO_PIN_7
#define FMC_A16_Pin GPIO_PIN_11
#define FMC0_15_GPIO_Port GPIOD

//////

I am supposed to receive an alternate signal but I always have the pins to high(all except A16 which is LOW (Data/command select register)).
NB : I have also used data= 0x28 , but same results.

Has anyone any idea why it is doing like this and how can I fix it .

thank you.

Parents Reply Children
No data