吐槽一下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-26 19:12
lusson 发表于 2015-4-29 09:16
我一直用SPI从机,硬件CS。FPGA做SPI主机,从未发生问题啊,STM32F429,目前用到最高速是12Mbps

SPI使用了 ...

哦,那估计是我没有用硬件cs的原因。发现库函数固然方便,但是稳定性欠佳,改用USART通信以后在通讯过程中拔掉线同样会发生下次无法正确接收数据的问题。
看来要想要可靠的通讯还是得自己写通讯函数才行,库函数很多东西都未考虑到。
芯片本身应该并不存在问题,还是程序本身不够健全,现在不得不自己重写这部分代码了。
lusson
2楼-- · 2019-12-26 20:39
 精彩回答 2  元偷偷看……
albert.hu
3楼-- · 2019-12-27 02:02
hantnt 发表于 2015-4-29 12:35
哦,那估计是我没有用硬件cs的原因。发现库函数固然方便,但是稳定性欠佳,改用USART通信以后在通讯过程 ...

库函数只是帮你减少配置寄存器,怎么用,当然是你的问题了,怪不到库函数的,写库函数的人也不会预见你会怎么用,灵活性都在程序员这,如果都做死了,又会有新的问题
hantnt
4楼-- · 2019-12-27 06:57
lusson 发表于 2015-4-29 13:35
通讯过程中拔掉再接上无法正确接收数据,是你协议的问题吧。。

我用的这个函数if(HAL_UART_Receive_IT(&Uart2Handle, (uint8_t *)RxBuffer, 10) == HAL_OK),
拔掉再接上就无法再次进入该该函数了,debug一下发现好几个标志位都被置位,还是得自己写的靠谱点儿,ST的库不想再去研究了,上次就发现有bug了,这次不会再去上面花时间了。
hantnt
5楼-- · 2019-12-27 08:52
albert.hu 发表于 2015-4-29 13:39
库函数只是帮你减少配置寄存器,怎么用,当然是你的问题了,怪不到库函数的,写库函数的人也不会预见你会 ...

要是我去写这些函数,我肯定会将这些意外情况都考虑进去的,库不行只能说明他们的程序员考虑欠佳。
albert.hu
6楼-- · 2019-12-27 14:42
hantnt 发表于 2015-4-29 13:46
要是我去写这些函数,我肯定会将这些意外情况都考虑进去的,库不行只能说明他们的程序员考虑欠佳。 ...

那你自己写一个好了,本来ST的库就只是简化寄存器操作,不是什么应用程序框架,这是人家的目的,你需要框架,并不代表别人就需要

一周热门 更多>