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.
Question for you.
If you were presented with a block of text as you have supplied, would you bother spending any of your own time looking at it?