【求助】关于spi dma 读写的问题

2019-07-20 08:33发布

目前在使用spi dma读的过程中开头会丢失部分数据,用的F767的开发板,spi主模式以及双线模式,因为从机spi设备需要主机f767提供时钟,所以开启接收DMA的同时开启发送DMA,并且接收DMA的优先级高于发送DMA,DMA使用非循环模式,具体代码如下:u8 Rx_Buffer[spi_buf_size]={ 0 };
      u8 Tx_Buffer[spi_buf_size]={ 0 };
int main(void)
   {                 
        HAL_Init();     
..............................  
.............................              
SPI_Init();                      //初始化SPI
      MYDMA_Config(DMA2_Stream5,7,(u32)&SPI5->DR,(u32)Rx_Buffer,spi_buf_size);  //设置接收dma
      MYDMA_Config(DMA2_Stream6,7,(u32)&SPI5->DR,(u32)Tx_Buffer,spi_buf_size); //设置读取dma
      SPI5_CS(1);      
//片选拉低
     delay_ms(185);     //同步信号
      SPI5_CS(0);   //片选拉低
       while((SPI5->SR&2)==0);
      SPI5->DR;
      SPI5->CR2|=3;
      MYDMA_Enable(DMA2_Stream5,spi_buf_size);
      MYDMA_Enable(DMA2_Stream6,spi_buf_size);  
      while((DMA2->HISR&(1<<11))==DMA_HISR_TCIF5 );
      DMA2->HIFCR|=1<<11;//清除DMA传输完成中断标志

} CP8U$}_C`MLHH[N6%DXLXQH.png
从第一个红框可以看到,Rx_Buffer收到的数据开头都是0(原本应该是一个固定的head,如第二个红框所示),后面的数据则都是正常的,重新设置NDTR再读一次还是会出现开头数据丢失的问题。求各位大佬略施援手。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。