/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file octospi.c * @brief This file provides code for the configuration * of the OCTOSPI instances. ****************************************************************************** * @attention * * Copyright (c) 2025 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "octospi.h" /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ OSPI_HandleTypeDef hospi2; /* OCTOSPI2 init function */ void MX_OCTOSPI2_Init(void) { /* USER CODE BEGIN OCTOSPI2_Init 0 */ /* USER CODE END OCTOSPI2_Init 0 */ OSPIM_CfgTypeDef sOspiManagerCfg = {0}; /* USER CODE BEGIN OCTOSPI2_Init 1 */ /* USER CODE END OCTOSPI2_Init 1 */ hospi2.Instance = OCTOSPI2; hospi2.Init.FifoThreshold = 8; hospi2.Init.DualQuad = HAL_OSPI_DUALQUAD_DISABLE; hospi2.Init.MemoryType = HAL_OSPI_MEMTYPE_MICRON; hospi2.Init.DeviceSize = 23; hospi2.Init.ChipSelectHighTime = 1; hospi2.Init.FreeRunningClock = HAL_OSPI_FREERUNCLK_DISABLE; hospi2.Init.ClockMode = HAL_OSPI_CLOCK_MODE_3; hospi2.Init.WrapSize = HAL_OSPI_WRAP_NOT_SUPPORTED; hospi2.Init.ClockPrescaler = 3; hospi2.Init.SampleShifting = HAL_OSPI_SAMPLE_SHIFTING_HALFCYCLE; hospi2.Init.DelayHoldQuarterCycle = HAL_OSPI_DHQC_DISABLE; hospi2.Init.ChipSelectBoundary = 0; hospi2.Init.DelayBlockBypass = HAL_OSPI_DELAY_BLOCK_BYPASSED; hospi2.Init.MaxTran = 0; hospi2.Init.Refresh = 0; if (HAL_OSPI_Init(&hospi2) != HAL_OK) { Error_Handler(); } sOspiManagerCfg.ClkPort = 1; sOspiManagerCfg.NCSPort = 1; sOspiManagerCfg.IOLowPort = HAL_OSPIM_IOPORT_1_LOW; if (HAL_OSPIM_Config(&hospi2, &sOspiManagerCfg, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN OCTOSPI2_Init 2 */ /* USER CODE END OCTOSPI2_Init 2 */ } void HAL_OSPI_MspInit(OSPI_HandleTypeDef* ospiHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; if(ospiHandle->Instance==OCTOSPI2) { /* USER CODE BEGIN OCTOSPI2_MspInit 0 */ /* USER CODE END OCTOSPI2_MspInit 0 */ /** Initializes the peripherals clock */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_OSPI; PeriphClkInitStruct.OspiClockSelection = RCC_OSPICLKSOURCE_D1HCLK; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } /* OCTOSPI2 clock enable */ __HAL_RCC_OCTOSPIM_CLK_ENABLE(); __HAL_RCC_OSPI2_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); /**OCTOSPI2 GPIO Configuration PA1 ------> OCTOSPIM_P1_IO3 PA3 ------> OCTOSPIM_P1_IO2 PB0 ------> OCTOSPIM_P1_IO1 PB2 ------> OCTOSPIM_P1_CLK PE11 ------> OCTOSPIM_P1_NCS PD11 ------> OCTOSPIM_P1_IO0 */ GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_OCTOSPIM_P1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF6_OCTOSPIM_P1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF4_OCTOSPIM_P1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_OCTOSPIM_P1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_OCTOSPIM_P1; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_OCTOSPIM_P1; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USER CODE BEGIN OCTOSPI2_MspInit 1 */ /* USER CODE END OCTOSPI2_MspInit 1 */ } } void HAL_OSPI_MspDeInit(OSPI_HandleTypeDef* ospiHandle) { if(ospiHandle->Instance==OCTOSPI2) { /* USER CODE BEGIN OCTOSPI2_MspDeInit 0 */ /* USER CODE END OCTOSPI2_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_OCTOSPIM_CLK_DISABLE(); __HAL_RCC_OSPI2_CLK_DISABLE(); /**OCTOSPI2 GPIO Configuration PA1 ------> OCTOSPIM_P1_IO3 PA3 ------> OCTOSPIM_P1_IO2 PB0 ------> OCTOSPIM_P1_IO1 PB2 ------> OCTOSPIM_P1_CLK PE11 ------> OCTOSPIM_P1_NCS PD11 ------> OCTOSPIM_P1_IO0 */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_3); HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_2); HAL_GPIO_DeInit(GPIOE, GPIO_PIN_11); HAL_GPIO_DeInit(GPIOD, GPIO_PIN_11); /* USER CODE BEGIN OCTOSPI2_MspDeInit 1 */ /* USER CODE END OCTOSPI2_MspDeInit 1 */ } } /* USER CODE BEGIN 1 */ /* USER CODE END 1 */