static void HAL_FSMC_MspInit(void){ /* USER CODE BEGIN FSMC_MspInit 0 */ /* USER CODE END FSMC_MspInit 0 */ GPIO_InitTypeDef GPIO_InitStruct; if (FSMC_Initialized) { return; } FSMC_Initialized = 1; /* Peripheral clock enable */ __FSMC_CLK_ENABLE(); /** FSMC GPIO Configuration PE7 ------> FSMC_D4 PE8 ------> FSMC_D5 PE9 ------> FSMC_D6 PE10 ------> FSMC_D7 PE11 ------> FSMC_D8 PE12 ------> FSMC_D9 PE13 ------> FSMC_D10 PE14 ------> FSMC_D11 PE15 ------> FSMC_D12 PD8 ------> FSMC_D13 PD9 ------> FSMC_D14 PD10 ------> FSMC_D15 PD11 ------> FSMC_A16 PD14 ------> FSMC_D0 PD15 ------> FSMC_D1 PD0 ------> FSMC_D2 PD1 ------> FSMC_D3 PD4 ------> FSMC_NOE PD5 ------> FSMC_NWE PD7 ------> FSMC_NE1 */ /* 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_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* 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_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USER CODE BEGIN FSMC_MspInit 1 */ /* USER CODE END FSMC_MspInit 1 */ }
/** * @brief Configures the Parallel interface (FSMC) for LCD(Parallel mode) * @param None * @retval None */ static void LCD_FSMCConfig(void) { FSMC_NORSRAM_TimingTypeDef Timing; /* Enable FSMC clock */ __FSMC_CLK_ENABLE(); /*-- FSMC Configuration ------------------------------------------------------*/ /*----------------------- SRAM Bank 1 ----------------------------------------*/ /* FSMC_NORSRAM_BANK1 configuration */ /* Color LCD configuration ------------------------------------ LCD configured as follow: - Memory Type = SRAM - NE1 chip select/ BANK1 (NOR type) - LCD Register Select A19 - Data/Address MUX = Disable - Memory Type = SRAM - Data Width = 16bit - Write Operation = Enable - Extended Mode = Enable - Asynchronous Wait = Disable */ /** Perform the SRAM1 memory initialization sequence */ hsram1_ssd2119.Instance = FSMC_NORSRAM_DEVICE; hsram1_ssd2119.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; /* hsram1_ssd2119.Init */ hsram1_ssd2119.Init.NSBank = FSMC_NORSRAM_BANK1; hsram1_ssd2119.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; hsram1_ssd2119.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; hsram1_ssd2119.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; hsram1_ssd2119.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; hsram1_ssd2119.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; hsram1_ssd2119.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; hsram1_ssd2119.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; hsram1_ssd2119.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; hsram1_ssd2119.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; hsram1_ssd2119.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; hsram1_ssd2119.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; hsram1_ssd2119.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; /* Timing */ Timing.AddressSetupTime = 1; Timing.AddressHoldTime = 1; Timing.DataSetupTime = 9; Timing.BusTurnAroundDuration = 0; Timing.CLKDivision = 0; Timing.DataLatency = 0; Timing.AccessMode = FSMC_ACCESS_MODE_A; /* ExtTiming */ HAL_SRAM_Init(&hsram1_ssd2119, &Timing, NULL); }
void ClockEnable (void) { __GPIOA_CLK_ENABLE(); __GPIOB_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); __GPIOD_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); __GPIOF_CLK_ENABLE(); __GPIOG_CLK_ENABLE(); __GPIOH_CLK_ENABLE(); __ADC1_CLK_ENABLE(); __ADC2_CLK_ENABLE(); __DAC_CLK_ENABLE(); __FSMC_CLK_ENABLE(); __SPI2_CLK_ENABLE(); __DMA2_CLK_ENABLE(); __TIM1_CLK_ENABLE(); __TIM2_CLK_ENABLE(); }
/** * @brief Initializes FSMC_BANK3 MSP. * @param None * @retval None */ static void FSMC_BANK3_MspInit(void) { GPIO_InitTypeDef GPIO_Init_Structure; /* Enable FSMC clock */ __FSMC_CLK_ENABLE(); /* Enable GPIOs clock */ __GPIOD_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); __GPIOF_CLK_ENABLE(); __GPIOG_CLK_ENABLE(); /* Common GPIO configuration */ GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; GPIO_Init_Structure.Pull = GPIO_PULLUP; GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; GPIO_Init_Structure.Alternate = GPIO_AF12_FSMC; /* GPIOD configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 |\ GPIO_PIN_14 | GPIO_PIN_15; HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); /* GPIOE configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | 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; HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); /* GPIOF configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure); /* GPIOG configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ GPIO_PIN_5 | GPIO_PIN_10; HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure); }
/** * @brief Initializes the GPIO used for the LCD * @param None * @retval None */ static void prvLCD_GPIOConfig() { /* Enable clock for GPIOD, GPIOE and FSMC */ __GPIOD_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); __FSMC_CLK_ENABLE(); /* The pins should be set to maximum speed and as alternate-function */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_InitStructure.Pull = GPIO_NOPULL; GPIO_InitStructure.Alternate = GPIO_AF12_FSMC; /* PD7: FSMC_NE1 -> CS */ GPIO_InitStructure.Pin = GPIO_PIN_7; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD4: FSMC_NOE -> RD */ GPIO_InitStructure.Pin = GPIO_PIN_4; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD5: FSMC_NWE -> RW */ GPIO_InitStructure.Pin = GPIO_PIN_5; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD13: FSMC_A18 -> RS */ GPIO_InitStructure.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD14: FSMC_D0 */ GPIO_InitStructure.Pin = GPIO_PIN_14; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD15: FSMC_D1 */ GPIO_InitStructure.Pin = GPIO_PIN_15; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD0: FSMC_D2 */ GPIO_InitStructure.Pin = GPIO_PIN_0; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD1: FSMC_D3 */ GPIO_InitStructure.Pin = GPIO_PIN_1; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PE7: FSMC_D4 */ GPIO_InitStructure.Pin = GPIO_PIN_7; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE8: FSMC_D5 */ GPIO_InitStructure.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE9: FSMC_D6 */ GPIO_InitStructure.Pin = GPIO_PIN_9; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE10: FSMC_D7 */ GPIO_InitStructure.Pin = GPIO_PIN_10; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE11: FSMC_D8 */ GPIO_InitStructure.Pin = GPIO_PIN_11; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE12: FSMC_D9 */ GPIO_InitStructure.Pin = GPIO_PIN_12; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE13: FSMC_D10 */ GPIO_InitStructure.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE14: FSMC_D11 */ GPIO_InitStructure.Pin = GPIO_PIN_14; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PE15: FSMC_D12 */ GPIO_InitStructure.Pin = GPIO_PIN_15; HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); /* PD8: FSMC_D13 */ GPIO_InitStructure.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD9: FSMC_D14 */ GPIO_InitStructure.Pin = GPIO_PIN_9; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); /* PD10: FSMC_D15 */ GPIO_InitStructure.Pin = GPIO_PIN_10; HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); }
/** * @brief Initializes SRAM MSP. * @param hsram: SRAM handle * @retval None */ static void SRAM_MspInit(void) { static DMA_HandleTypeDef dmaHandle; GPIO_InitTypeDef GPIO_Init_Structure; SRAM_HandleTypeDef *hsram = &sramHandle; /* Enable FMC clock */ __FSMC_CLK_ENABLE(); /* Enable chosen DMAx clock */ __SRAM_DMAx_CLK_ENABLE(); /* Enable GPIOs clock */ __GPIOD_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); __GPIOF_CLK_ENABLE(); __GPIOG_CLK_ENABLE(); /* Common GPIO configuration */ GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; GPIO_Init_Structure.Pull = GPIO_PULLUP; GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; GPIO_Init_Structure.Alternate = GPIO_AF12_FSMC; /* GPIOD configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 |\ GPIO_PIN_14 | GPIO_PIN_15; HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); /* GPIOE configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | 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; HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); /* GPIOF configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure); /* GPIOG configuration */ GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ GPIO_PIN_5 | GPIO_PIN_9; HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure); /* Configure common DMA parameters */ dmaHandle.Init.Channel = SRAM_DMAx_CHANNEL; dmaHandle.Init.Direction = DMA_MEMORY_TO_MEMORY; dmaHandle.Init.PeriphInc = DMA_PINC_ENABLE; dmaHandle.Init.MemInc = DMA_MINC_ENABLE; dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; dmaHandle.Init.Mode = DMA_NORMAL; dmaHandle.Init.Priority = DMA_PRIORITY_HIGH; dmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; dmaHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; dmaHandle.Init.MemBurst = DMA_MBURST_INC8; dmaHandle.Init.PeriphBurst = DMA_PBURST_INC8; dmaHandle.Instance = SRAM_DMAx_STREAM; /* Associate the DMA handle */ __HAL_LINKDMA(hsram, hdma, dmaHandle); /* Deinitialize the stream for new transfer */ HAL_DMA_DeInit(&dmaHandle); /* Configure the DMA stream */ HAL_DMA_Init(&dmaHandle); /* NVIC configuration for DMA transfer complete interrupt */ HAL_NVIC_SetPriority(SRAM_DMAx_IRQn, 5, 0); HAL_NVIC_EnableIRQ(SRAM_DMAx_IRQn); }