吐槽一下STM32的SPI作为从机的问题

2019-12-24 18:38发布

本帖最后由 hantnt 于 2015-4-28 13:31 编辑

之前一直以为STM32就iic有bug,今天又发现当spi作为从机使用时会出现各种莫名其妙的问题。
首先是接收机制的问题,接收时只检测SCK的跳变沿,很容易发生错位问题,而且复位SPI移位寄存器内容依然,可能有人要怀疑是不是我自己程序的问题,但是我所有代码都是直接调用库函数的。
其次是在间歇接收几十次之后就会发生丢字节的问题,这个问题就很严重了。
最终放弃了用stm32作为spi从机的通信方式,还是用UART吧,白折腾了一天。
ps:我自己用FPGA写的SPI接口从机从未出现过类似问题。

编辑原因:改错别字 其实-其次
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
ailibuli
1楼-- · 2019-12-28 07:53
我也遇到类似的情况,应该和楼主遇到的情况相同,楼主表述有点不太清楚,我遇到的问题是这样的:有两块STM32F107,一块做主机,一块做从机,从机SPI未使用硬件CS,正常情况下SPI可以正常通信,但当对主CPU烧写程序或者进行复位操作时,如果此时SPI正在传输数据,那么从机SPI的移位寄存器中就已经存入了部分数据位,然后主CPU重新开始运行,正常向从机SPI发送数据,由于从机SPI未使用硬件CS,从机SPI的移位寄存器中仍存有先前的部分数据,因此会导致数据错位。(之前没有用过STM32的SPI做从机,考虑不周,没有将硬件CS引脚引出来)

想采用的解决方式是:主机通过IO口向从机发送同步标识(也就是用软件模拟CS),每次发送一帧前,均通知从机SPI将移位寄存器清空。

但理想很丰满,现实却很骨感。找了半天也没找到怎么清空从机SPI的移位寄存器。哪位大神可以给点指点呀。在此先谢过。
amlt_shifu
2楼-- · 2019-12-28 10:52
ailibuli 发表于 2016-5-3 15:31
我也遇到类似的情况,应该和楼主遇到的情况相同,楼主表述有点不太清楚,我遇到的问题是这样的:有两块STM3 ...

在SPI中断里面  增加先关闭SPI 再打开 SPI  就ok了
SPI2->CR1 &= (uint16_t)~((uint16_t)SPI_CR1_SPE);
SPI2->CR1 |= SPI_CR1_SPE;
zqf441775525
3楼-- · 2019-12-28 16:24
我用STM32的SPI从机通信做了很多了,没发现有问题,最多的每次连续传输10K字节,200mS传输一次,没发现问题。

一周热门 更多>