打印
[STM32F0]

请教下如何清除STM32F051中SPI发送FIFO中的数据。

[复制链接]
6017|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cy757|  楼主 | 2014-1-9 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用了STM32F051中SPI,从模式,DMA传输。
发送时由于FIFO中有数据,导致多发送了3个字节的数据。请教下如何清除STM32F051中SPI发送FIFO中的数据。
谢谢。
沙发
airwill| | 2014-1-9 20:40 | 只看该作者
是不是可以禁能一下 FIFO? 看看手册怎么说

使用特权

评论回复
板凳
明月小厨| | 2014-1-12 10:34 | 只看该作者
FIFO?有这个吗?不是有DMA?

使用特权

评论回复
地板
cy757|  楼主 | 2014-2-7 10:53 | 只看该作者
明月小厨 发表于 2014-1-12 10:34
FIFO?有这个吗?不是有DMA?

F1系列是没有的,F0新增的。

使用特权

评论回复
5
明月小厨| | 2014-2-7 17:21 | 只看该作者
FIFO适合数据量不大的传输,F1是没有的,用的是DMA;印象中,好象F0是提过FIFO;没注意。

使用特权

评论回复
6
明月小厨| | 2014-2-7 17:38 | 只看该作者
RXFIFO 可以存储多达4 个数据帧,而TXFIFO 在字长不大于8 的时候也只可以存储多达三个数据帧。 这种差异可以防止在已经有3 个8 位数据存在TXFIFO 中的时候,软件试图在16位模式下向TXFIFO 写入更多的数据而造成数据破坏。 TXE 和RXNE 事件都可以通过中断查询或处理。
......
问题1:FIFO中永远都有三个数据,这三个数据你可以重写;
问题2:你的问题是你没想用FIFO,但它却起作用了;你想立即写的数据排在FIFO后面了;是吧。

使用特权

评论回复
7
明月小厨| | 2014-2-7 17:49 | 只看该作者
所有SPI 数据换都通过32 位的嵌入式FIFO。 这使SPI 可以连续工作,防止短数据帧时的数据断流。 每个方向都有它自己的FIFO 称为TXFIFO 和RXFIFO。 这些FIFO 被用于除了单接收+CRC 模式外的所有的SPI 模式(主从);
不想用FIFO不行,不得不用。再说了,没有什么不好,有这个好。

把SPI复位,所有的全清掉,重新工作的时候,FIFO肯定为空,你要写的可以排在最前面,第一个发出去;:victory:

使用特权

评论回复
8
sinc_mark| | 2014-7-7 14:48 | 只看该作者
不知道楼主说的是不是这样的情况:使用SPI DMA读数据,一开始接收数据正确,但运行一段时间后发现收到的数据前面三个字节为0,然后两个字节为0,再运行1个字节为0,再运行一段时间数据正常,后重复这个过程。。。
我现在就是这种情况,不知道楼主怎么解决的?谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我的技术博客http://blog.csdn.net/cy757/ 博客关键词:STM32的USB、TCP,wince,C#,VC

103

主题

161

帖子

0

粉丝