本帖最后由 hantnt 于 2015-4-28 13:31 编辑
之前一直以为STM32就iic有bug,今天又发现当spi作为从机使用时会出现各种莫名其妙的问题。
首先是接收机制的问题,接收时只检测SCK的跳变沿,很容易发生错位问题,而且复位SPI移位寄存器内容依然,可能有人要怀疑是不是我自己程序的问题,但是我所有代码都是直接调用库函数的。
其次是在间歇接收几十次之后就会发生丢字节的问题,这个问题就很严重了。
最终放弃了用stm32作为spi从机的通信方式,还是用UART吧,白折腾了一天。
ps:我自己用FPGA写的SPI接口从机从未出现过类似问题。
编辑原因:改错别字 其实-其次
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
还好,最高2.25Mbps,足够满足我的需求了,至少很稳定。
SPI使用了DMA。另外楼主说的用示波器碰下就容易丢位,这个不能怪STM32,你这一碰产生的干扰可能会有好几个脉冲,这个会让STM32认作是SCK,SPI本来的时钟本来就是边沿检测,UART异步是到固定位置检测高低电平来判断0还是1.
你要测试的话应该是先把示波器接上,再通电来抓波形,而不是在通讯过程中用表笔去触碰来抓数据。
另外你说的启停没有不知道是什么意思?CS拉低的话STM32就开始准备接收SCK了。CS拉高的话STM32就停止接收SCK,同时表示当前传输完毕。
一周热门 更多>