LL库,Receive only Master。Data size16,DMA mode Normal。初始化没啥特别的,CubeMX生成。然后配置DMA:
LL_DMA_ConfigAddresses(DMA2, LL_DMA_STREAM_0, LL_SPI_DMA_GetRegAddr(SPI1),
(uint32_t)buf,LL_DMA_GetDataTransferDirection(DMA2, LL_DMA_STREAM_0));
LL_DMA_EnableIT_TC(DMA2, LL_DMA_STREAM_0);
LL_SPI_EnableDMAReq_RX(SPI1);
每次开始接收:
LL_DMA_DisableStream(DMA2, LL_DMA_STREAM_0);
LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_0,8);
LL_SPI_Enable(SPI1);
LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_0);
还有中断:
void DMA2_Stream0_IRQHandler(void)
{
if(LL_DMA_IsActiveFlag_TC0(DMA2))
{
// 清除传输完成标志位
LL_DMA_ClearFlag_TC0(DMA2);
LL_SPI_Disable(SPI1);
spi_rcv();
}
}
每次接收2*8字节,原本以为buf里面数据的顺序为data0,data1...data7(为short类型),实际上却是data1,data2...data7,data0。逻辑分析仪查波形,SPI传过来的顺序是对的,怎么到这里就出错了?
仔细想想,数据从