ST意法半导体
直播中

fdjslkjd

9年用户 1190经验值
擅长:光电显示
私信 关注
[问答]

使用TouchGFX 1.17为Tiny Shark创建一个项目生成硬故障怎么解决

我使用 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();
  •   }
  • }
如果没有我添加的附加行,一个空句柄将传递给以下函数,从而产生硬错误。
我不确定我是否以最好的方式解决了这个问题,因为我只是一个业余程序员而且我的老师知道的比我少。你可以猜出我的老师是谁。
还有其他人遇到过这个吗?
我希望这对其他人有用。


回帖(1)

刘世晓

2022-12-8 11:44:29
>> 还有其他人遇到过这个吗?
遇到过类似的。
更像是 hospi_nor global 初始化不当,或者事物的顺序乱序。理想情况下,BSP_SPI_NOR_DeInit() 中应该有断言或 NULL 检查,以便在它出错之前捕获其中的一些。
观察诸如 External Loader 之类的东西,全局静态没有被 startup.s 或 scatterloader 中的代码初始化。如果 SystemInit() 被正确使用,这也经常存在于预初始化状态,因为它是应该在 C 运行时初始化那里的内容之前设置系统的内存。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分