我使用 TouchGFX 1.17 为
tiny Shark 创建了一个项目,发现它为 NOR Ram OCTOSPI 接口生成的代码不正确,因此生成了硬故障。
我使用 Ver 构建了另一个项目。1.18,遇到了同样的问题。
幸运的是,我在修改后的行旁边放了一个标签,所以我在较早的项目中找到了它并将其放入新项目中。
相关代码是:
- /**
- * @brief OCTOSPI1 Initialization Function
- * @param None
- * @retval None
- */
- static void MX_OCTOSPI1_Init(void)
- { uint32_t statusResult;
- /* OCTOSPI1 parameter configuration*/
- hospi1.Instance = OCTOSPI1;
- hospi1.Init.FifoThreshold = 1;
- hospi1.Init.DualQuad = HAL_OSPI_DUALQUAD_DISABLE;
- hospi1.Init.MemoryType = HAL_OSPI_MEMTYPE_MICRON;
- hospi1.Init.DeviceSize = 26;
- hospi1.Init.ChipSelectHighTime = 2;
- hospi1.Init.FreeRunningClock = HAL_OSPI_FREERUNCLK_DISABLE;
- hospi1.Init.ClockMode = HAL_OSPI_CLOCK_MODE_0;
- hospi1.Init.WrapSize = HAL_OSPI_WRAP_NOT_SUPPORTED;
- hospi1.Init.ClockPrescaler = 3;
- hospi1.Init.SampleShifting = HAL_OSPI_SAMPLE_SHIFTING_NONE;
- hospi1.Init.DelayHoldQuarterCycle = HAL_OSPI_DHQC_DISABLE;
- hospi1.Init.ChipSelectBoundary = 0;
- hospi1.Init.ClkChipSelectHighTime = 0;
- hospi1.Init.DelayBlockBypass = HAL_OSPI_DELAY_BLOCK_BYPASSED;
- hospi1.Init.MaxTran = 0;
- hospi1.Init.Refresh = 0;
- if (HAL_OSPI_Init(&hospi1) != HAL_OK)
- {
- Error_Handler();
- }
- /* OCTOSPI1_Init 2 */
- BSP_OSPI_NOR_Init_t Flash;
- Flash.InterfaceMode = BSP_OSPI_NOR_OPI_MODE;
- Flash.TransferRate = BSP_OSPI_NOR_DTR_TRANSFER;
- hospi_nor->Instance = hospi1.Instance; /* rjg mod <==========================*/
- BSP_OSPI_NOR_DeInit(0);
- int32_t RetVal = BSP_OSPI_NOR_Init(0, &Flash);
- if(RetVal != BSP_ERROR_NONE)
- {
- Error_Handler();
- }
- RetVal = BSP_OSPI_NOR_EnableMemoryMappedMode(0);
- if(RetVal != BSP_ERROR_NONE)
- {
- Error_Handler();
- }
- }
如果没有我添加的附加行,一个空句柄将传递给以下函数,从而产生硬错误。
我不确定我是否以最好的方式解决了这个问题,因为我只是一个业余程序员而且我的老师知道的比我少。你可以猜出我的老师是谁。
还有其他人遇到过这个吗?
我希望这对其他人有用。