吐槽一下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条回答
hantnt
1楼-- · 2019-12-25 23:30
zhaoxukiller 发表于 2015-4-28 19:39
但是USART有SPI速率快吗?

还好,最高2.25Mbps,足够满足我的需求了,至少很稳定。
lujun723
2楼-- · 2019-12-26 01:47
SPI配置问题,好好看手册
hantnt
3楼-- · 2019-12-26 01:52
 精彩回答 2  元偷偷看……
wangfriend
4楼-- · 2019-12-26 04:25
一直用SPI  主从机都是STM32     在同一个板上。 没有出现过问题。 有简单的校验机制。
yu_studio
5楼-- · 2019-12-26 09:00
我用STM32 SPI从机也遇到问题,上网搜了一下,有人反映过有问题。我的通信速度要求不高,后来改模拟从机完事。
lusson
6楼-- · 2019-12-26 14:26
我一直用SPI从机,硬件CS。FPGA做SPI主机,从未发生问题啊,STM32F429,目前用到最高速是12Mbps

SPI使用了DMA。另外楼主说的用示波器碰下就容易丢位,这个不能怪STM32,你这一碰产生的干扰可能会有好几个脉冲,这个会让STM32认作是SCK,SPI本来的时钟本来就是边沿检测,UART异步是到固定位置检测高低电平来判断0还是1.
你要测试的话应该是先把示波器接上,再通电来抓波形,而不是在通讯过程中用表笔去触碰来抓数据。

另外你说的启停没有不知道是什么意思?CS拉低的话STM32就开始准备接收SCK了。CS拉高的话STM32就停止接收SCK,同时表示当前传输完毕。

一周热门 更多>