目前在使用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传输完成中断标志
}
从第一个红框可以看到,Rx_Buffer收到的数据开头都是0(原本应该是一个固定的head,如第二个红框所示),后面的数据则都是正常的,重新设置NDTR再读一次还是会出现开头数据丢失的问题。求各位大佬略施援手。
一周热门 更多>