stm32 HAL库spi接收的同时为什么有数据发送出去的解答

    有时候不得不吐槽一下st封装的hal库,有时候用起来很方便,有时候却给人造成麻烦,找半天找不出来问题,还要深入去看他封装的库。就如标题所述,在调试spi 中断方式接收数据的时候却发现MOSI线上同样有数据发出去。并且发出去的数据也就是我之前接收到的数据。可事实是我并没有去操作让spi发送数据。

    查了半天终于发现根本问题还是hal库上面去,封装这个函数的人不知道怎么想的,会这样设计。先看下我原来调用中断接收的这个函数:

     这个列举了一部分,可以看到HAL_SPI_Receive最终还是调用了HAL_SPI_TransmitReceive 这个函数。重点看下他的参数,把发送和接收的缓冲区都指向了pData 。这样我pData里面遗留的上次接收到的数据这次肯定是要被发送出去了。找到原因肯定要解决。我目的是在接收的时候让MOSI一直保持低电平,也就是相当于mosi上的数据一直是0x00就ok了。

    要实现这个目的同时不修改hal库的封装调用HAL_SPI_Receive_IT这个函数肯定是不行了。那我干脆直接调用HAL_SPI_TransmitReceive 就行了,我手动指定发送缓冲区,让他发送0就行了。如下所示:hspi1.State = HAL_SPI_STATE_BUSY_RX;这句话是不能丢的

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注