MIAD_Ziv 2025-11-11 15:19 采纳率: 0%
浏览 11

GD32H7 qspi

想请问一下,我在使用GD32H7开发时:

  1. 使用SPI3当做QSPI
  2. DZ设定为 8bit
  3. BYTEN=1, WORDEN=0
    使用上述条件,发送一个 byte 数据,BUS 上打出 2 个bytes,且发送的数据相同
    这个异常是因为哪里没配置好吗
    spi3_peripheral_config();        
        /* spi3 io output enable */        
        spi_quad_io23_output_enable(SPI3);
        /* spi3 quad enable */
        spi_quad_enable(SPI3);
        /* spi3 quad write enable */
        spi_quad_write_enable(SPI3);
        /* spi3 quad write access byte enable */
      spi_byte_access_enable(SPI3);
        /* spi3 quad write access word disable */
        spi_word_access_disable(SPI3);
        /* FIFO level set 4-data frame */
    spi_fifo_threshold_level_set(SPI3, SPI_FIFO_TH_04DATA);
        /* configure SPI data frame size */
        spi_i2s_data_frame_size_config(SPI3, SPI_DATASIZE_8BIT);
        /* configure SPI data frame size */
        spi_current_data_num_config(SPI3, 0);
        /* spi3 enable */
        spi_enable(SPI3);    
        
        /* set nss low */            
    SET_SPI3_NSS_LOW                        
      //spi_dma_enable(SPI3, SPI_DMA_RECEIVE);
         //spi_dma_enable(SPI3, SPI_DMA_TRANSMIT);
        /* Polling SPI TP flag */
        while(spi_i2s_flag_get(SPI3, SPI_FLAG_TP) == RESET){};
        /* Polling SPI TC flag */
        while(spi_i2s_flag_get(SPI3, SPI_FLAG_TC) == RESET){};
        spi_i2s_data_transmit(SPI3, 0xEE);        
        /* SPI master start transfer */     
        spi_master_transfer_start(SPI3, SPI_TRANS_START);                
        /* wait DMA transmit complete */    
    //while(dma_flag_get(DMA0, DMA_CH4, DMA_FLAG_FTF) == RESET){};
                
        /*Polling SPI TC flag  */    
        while(spi_i2s_flag_get(SPI3, SPI_FLAG_TC) == RESET){};       
        /* Clear DMA Transfer Complete Flags */    
    //dma_flag_clear(DMA0, DMA_CH4, DMA_FLAG_FTF);    
        /* set nss high */   
        SET_SPI3_NSS_HIGH            


  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-11-11 15:24
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    你使用GD32H7开发板,配置SPI3为QSPI模式,设置为8位字节传输(BYTEN=1),不使用字(WORDEN=0)。但是,当发送一个字节的数据时,SPI总线上却输出了两个字节的数据。

    解决方案

    这个问题很可能是由于SPI的传输模式和数据长度不匹配导致的。根据你的配置,SPI应该是以字节为单位传输的,但是你发送的数据长度却是字节。

    核心代码

    // 设置SPI3为QSPI模式
    RCC->AHB1ENR |= RCC_AHB1ENR_SPI3EN;
    SPI3->CR1 |= SPI_CR1_BUDIS; // 使能SPI3
    SPI3->CR1 |= SPI_CR1_BYPEN; // 使能SPI3的字节传输
    SPI3->CR1 |= SPI_CR1_WORDEN; // 使能SPI3的字传输
    SPI3->CR1 |= SPI_CR1_MSTR; // 使能SPI3的主模式
    
    // 发送一个字节的数据
    uint8_t data = 0x01;
    SPI3->DR = data; // 发送数据
    while (!(SPI3->SR & SPI_SR_TXE)); // 等待发送完成
    

    注意

    在上述代码中,我们设置了SPI3的字节传输模式(BYTEN=1),但是我们发送的数据长度却是字节。这个可能是问题的根源。我们需要检查SPI的配置和数据发送代码是否正确。

    建议

    1. 检查SPI的配置是否正确。
    2. 确保数据发送代码正确。
    3. 使用调试工具(如JTAG调试器)来检查SPI总线上的数据传输情况。
    评论

报告相同问题?

问题事件

  • 创建了问题 11月11日