我采用两片stm32 使用 dma+spi 进行通信
有时候 发现主机接收到的 数据 产生了 左移一位的错误,而且 必须复位 slave 才能恢复 经过测试
将 slave 的 NSS 改为硬件接收 然后 slave的最高传输速率比 master 高 就没有再产生那个问题了
if(mode==1)
{
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//SPI_NSS_Hard;//
}
else
{
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //接收的波特率 要比 发送的波特率 高 才能稳定的接收
SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;//SPI_NSS_Soft;//
}
大家是怎么判定slave的spi的接收完毕的,我现在是在 slave 的NSS io 做了一个上升沿中断,当主机数据发送完毕, 修改设定 NSS=1
slave 就产生一个上升沿的中断 发送接收完毕信号量
|