[STM32H7] STM32H735 QSPI初始化失败,NCS引脚被禁用。

[复制链接]
265|0
lilaiju 发表于 2025-10-26 09:40 | 显示全部楼层 |阅读模式
CubeIDE 配置QSPI时禁用了NCS。已启用:Project Manager → Code Generator → HAL Settings → Enable Full Assert
意图是将多个QSPI芯片通过各自的片选引脚连接到QSPI接口,因此不应通过硬件提供NCS信号。在Cube GUI中未选择NCS:

在生成的MX_OCTOSPI1_Init()函数中,使用sOspiManagerCfg结构调用了HAL_OSPIM_Config()。
static void MX_OCTOSPI1_Init(void)
{

  /* USER CODE BEGIN OCTOSPI1_Init 0 */

  /* USER CODE END OCTOSPI1_Init 0 */

  OSPIM_CfgTypeDef sOspiManagerCfg = {0};

  /* USER CODE BEGIN OCTOSPI1_Init 1 */

  /* USER CODE END OCTOSPI1_Init 1 */
  /* 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 = 32;
  hospi1.Init.ChipSelectHighTime = 1;
  hospi1.Init.FreeRunningClock = HAL_OSPI_FREERUNCLK_DISABLE;
  hospi1.Init.ClockMode = HAL_OSPI_CLOCK_MODE_3;
  hospi1.Init.WrapSize = HAL_OSPI_WRAP_NOT_SUPPORTED;
  hospi1.Init.ClockPrescaler = 1;
  hospi1.Init.SampleShifting = HAL_OSPI_SAMPLE_SHIFTING_NONE;
  hospi1.Init.DelayHoldQuarterCycle = HAL_OSPI_DHQC_DISABLE;
  hospi1.Init.ChipSelectBoundary = 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();
  }
  sOspiManagerCfg.ClkPort = 1;
  sOspiManagerCfg.IOLowPort = HAL_OSPIM_IOPORT_1_LOW;
  if (HAL_OSPIM_Config(&hospi1, &sOspiManagerCfg, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN OCTOSPI1_Init 2 */

  /* USER CODE END OCTOSPI1_Init 2 */


}
由于未使用NCS。在HAL_OSPIM_Config(stm32h7xx_hal_ospi.c,第2484行)中,以下断言当然会被触发:


assert_param(IS_OSPIM_PORT(cfg->NCSPort));

我认为这是错误的。要么不可能不使用NCS;那么如图所示,Cube GUI是错误的。要么生成的代码是错误的。

8663368fce35fe5685.png
667468fce3667c244.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部