在使用SPI主机半双工通信时,如果我在接收完成数据后没有及时的切换成发送状态,在结尾会多出几个时钟。如果这个时候再发送数据,时钟整好就少子之前多的那几个时钟信号。我尝试差在发送前关闭SPI再初始化还是会少几个时钟。请问有什么方法去清除发送之后SPI里上次残留的时钟信号,以避免下次再发送或接收时导致数据不完整
评分
查看全部评分
外挂芯片,接收和发送在一个脚上。不支持全双工
这里是我的发送的函数
// LL_SPI_Disable(SPI2);// 清除多余的CLK 以防止下次CLK错误
LL_DMA_DisableChannel(DMA1,5);
DMA1_Channel5->CMAR = (u32)TM1620B_fifo.data[TM1620B_fifo.rear].add;
DMA1_Channel5->CNDTR = TM1620B_fifo.data[TM1620B_fifo.rear].len;
SPI2_CS_L();
SET_BIT(SPI2->CR1, LL_SPI_HALF_DUPLEX_TX);
// LL_SPI_Enable(SPI2);
LL_DMA_EnableChannel(DMA1,5);//发送时要先设SPI为发送再开DMA传数据
重新打开或关闭都不能让SPI 的移位寄存器和时钟计数器复位导致下一次SPI传输错误。
上面的现像不是100% 存在的,有时候可能是赶巧SPI发送的时钟是正确的。
但是我感觉这应该是stm32 SPI的一个BUG
评分
查看全部评分
评分
查看全部评分