问答

汇集网友智慧,解决技术难题

21ic问答首页 - stm32f412 平台QSPI 屏幕通信不成功

spi STM32F4 芯片 通信 成功

stm32f412 平台QSPI 屏幕通信不成功

tanxs0012026-05-17
stm32f412 平台QSPI 通信不成功,屏幕芯片:CO5300,能正常发送,没有接收。

屏ID也读取不到。求教!谢谢!




回答 +关注 0
1263人浏览 8人回答问题 分享 举报
8 个回答
  • 上电复位后CO5300 默认是不是SPI 模式,不是QSPI模式。需要用SPI 命令切换模式到QSPI。
    手册上找不到说明。仅看到命令0XFF 是复位到SPI 模式。 2526a0eeb7f04606.png
    是不是暗示启动复位后默认是SPI模式。

    如果是这样,只好分两步初始化MCU 接口了
    tanxs001 2026-5-21 22:09 回复TA
    初始阶阶段默认就是单线SPI 
    tanxs001 2026-5-21 20:08 回复TA
    默认就是QSPI模式,只支持QSPI和MIPi。 

  • 硬件通过接线图QSPI,软件通过STM32的配置。

    #include "quadspi.h"

    /* USER CODE BEGIN 0 */

    /* USER CODE END 0 */

    QSPI_HandleTypeDef hqspi;

    /* QUADSPI init function */
    void MX_QUADSPI_Init(void)
    {

      /* USER CODE BEGIN QUADSPI_Init 0 */

      /* USER CODE END QUADSPI_Init 0 */

      /* USER CODE BEGIN QUADSPI_Init 1 */

      /* USER CODE END QUADSPI_Init 1 */
      hqspi.Instance = QUADSPI;
      hqspi.Init.ClockPrescaler = 9;
      hqspi.Init.FifoThreshold = 1;
      hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
      hqspi.Init.FlashSize = 31;
      hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
      hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
      hqspi.Init.FlashID = QSPI_FLASH_ID_1;
      hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
      if (HAL_QSPI_Init(&hqspi) != HAL_OK)
      {
        Error_Handler();
      }
      /* USER CODE BEGIN QUADSPI_Init 2 */

      /* USER CODE END QUADSPI_Init 2 */

    }

    void HAL_QSPI_MspInit(QSPI_HandleTypeDef* qspiHandle)
    {

      GPIO_InitTypeDef GPIO_InitStruct = {0};
      if(qspiHandle->Instance==QUADSPI)
      {
      /* USER CODE BEGIN QUADSPI_MspInit 0 */

      /* USER CODE END QUADSPI_MspInit 0 */
        /* QUADSPI clock enable */
        __HAL_RCC_QSPI_CLK_ENABLE();

        __HAL_RCC_GPIOE_CLK_ENABLE();
        __HAL_RCC_GPIOF_CLK_ENABLE();
        __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
        /**QUADSPI GPIO Configuration
        PE2     ------> QUADSPI_BK1_IO2
        PF8     ------> QUADSPI_BK1_IO0
        PF9     ------> QUADSPI_BK1_IO1
        PB1     ------> QUADSPI_CLK
        PD13     ------> QUADSPI_BK1_IO3
        PB6     ------> QUADSPI_BK1_NCS
        */
        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_QSPI;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

        GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
        HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

        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_QSPI;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        GPIO_InitStruct.Pin = GPIO_PIN_13;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF9_QSPI;
        HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

        GPIO_InitStruct.Pin = GPIO_PIN_6;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

      /* USER CODE BEGIN QUADSPI_MspInit 1 */

      /* USER CODE END QUADSPI_MspInit 1 */
      }
    }

    void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* qspiHandle)
    {

      if(qspiHandle->Instance==QUADSPI)
      {
      /* USER CODE BEGIN QUADSPI_MspDeInit 0 */

      /* USER CODE END QUADSPI_MspDeInit 0 */
        /* Peripheral clock disable */
        __HAL_RCC_QSPI_CLK_DISABLE();

        /**QUADSPI GPIO Configuration
        PE2     ------> QUADSPI_BK1_IO2
        PF8     ------> QUADSPI_BK1_IO0
        PF9     ------> QUADSPI_BK1_IO1
        PB1     ------> QUADSPI_CLK
        PD13     ------> QUADSPI_BK1_IO3
        PB6     ------> QUADSPI_BK1_NCS
        */
        HAL_GPIO_DeInit(GPIOE, GPIO_PIN_2);

        HAL_GPIO_DeInit(GPIOF, GPIO_PIN_8|GPIO_PIN_9);

        HAL_GPIO_DeInit(GPIOB, GPIO_PIN_1|GPIO_PIN_6);

        HAL_GPIO_DeInit(GPIOD, GPIO_PIN_13);

      /* USER CODE BEGIN QUADSPI_MspDeInit 1 */

      /* USER CODE END QUADSPI_MspDeInit 1 */
      }
    }

    /* USER CODE BEGIN 1 */
    /* 使用 4 线写入像素数据(前置命令 0x32) */
    void co5300_write_pixels(const uint8_t *data, uint32_t length)
    {
        QSPI_CommandTypeDef sCommand = {0};
        uint32_t address = (0x00 << 16) | (0x2C << 8) | 0x00;

        sCommand.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
        sCommand.Instruction       = 0x32;
        sCommand.AddressMode       = QSPI_ADDRESS_4_LINES;
        sCommand.AddressSize       = QSPI_ADDRESS_24_BITS;
        sCommand.Address           = address;
        sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
        sCommand.DataMode          = QSPI_DATA_4_LINES;
        sCommand.NbData            = length;
        sCommand.DummyCycles       = 0;
        sCommand.DdrMode           = QSPI_DDR_MODE_DISABLE;
        sCommand.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
        sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;


        if (HAL_QSPI_Command(&hqspi, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) {
            Error_Handler();
        }
        if (length > 0) {
            if (HAL_QSPI_Transmit(&hqspi, (uint8_t *)data, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) {
                Error_Handler();
            }
        }

    }

    /* USER CODE END 1 */

  • 请你把切换 QSPI 模式代码贴出来供大伙围观
    tanxs001 2026-5-21 18:19 回复TA
    已经有发代码 
  • Co5300_Datasheet.pdf (12.62 MB, 下载次数: 2)
    H0132Y002AM V0规格书1.32寸 466X466 MIPI OR QSPI AMOLED(2).pdf (1.42 MB, 下载次数: 2)
    H0132Y002AM接线图.pdf (89.82 KB, 下载次数: 1)
    命令发送.png


    tanxs001 2026-5-20 21:00 回复TA
    建议核查哪些地方? 
    tanxs001 2026-5-20 20:59 回复TA
    你的意思是QPSI的模式没有成功? 
    xch 2026-5-18 18:51 回复TA
    看起来都没进入QSPI模式 
  • 我也觉得正常逻辑能发送命令,就应该有响应的,所以这个现象很奇怪。
  • 按照下面的方式上传图片后再导入编辑栏里面:

    Snipaste_2026-05-18_13-09-27.png
    CO5300的数据手册里面的SPI时序图看过没?要对照一下时序看看,如果发送完全正确,一般不可能没应答,除非CO5300芯片没有正常工作。
    然后你可以把CO5300数据手册通过附件发来,我有空帮你对照一下你测试的发送波形。
    tanxs001 2026-5-18 15:06 回复TA
    替换成百度的域名 
    tanxs001 2026-5-18 15:06 回复TA
    * 替换成***的域名 
    tanxs001 2026-5-18 15:04 回复TA
    我试过了,图片上传不成功,我上传到网盘了。您方便可以查看:链接: https://pan.***.com/s/1HuWI-oB-QKn2pfrnZKK7-g?pwd=mty3 提取码: mty3 
  • 你发的截图看不到,有通过示波器或者逻辑分析仪看过发送的数据是否正确吗?
    tanxs001 2026-5-18 10:36 回复TA
    图片上传显示不了,就是逻辑分析仪的图片。发送的数据都是正确的,有核对过。可是就是没有响应。看起来是通信不成功。 

您需要登录后才可以回复 登录 | 注册