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

[复制链接]
 楼主| 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新增的。
明月小厨 发表于 2014-2-7 17:21 | 显示全部楼层
FIFO适合数据量不大的传输,F1是没有的,用的是DMA;印象中,好象F0是提过FIFO;没注意。
明月小厨 发表于 2014-2-7 17:38 | 显示全部楼层
RXFIFO 可以存储多达4 个数据帧,而TXFIFO 在字长不大于8 的时候也只可以存储多达三个数据帧。 这种差异可以防止在已经有3 个8 位数据存在TXFIFO 中的时候,软件试图在16位模式下向TXFIFO 写入更多的数据而造成数据破坏。 TXE 和RXNE 事件都可以通过中断查询或处理。
......
问题1:FIFO中永远都有三个数据,这三个数据你可以重写;
问题2:你的问题是你没想用FIFO,但它却起作用了;你想立即写的数据排在FIFO后面了;是吧。
明月小厨 发表于 2014-2-7 17:49 | 显示全部楼层
所有SPI 数据换都通过32 位的嵌入式FIFO。 这使SPI 可以连续工作,防止短数据帧时的数据断流。 每个方向都有它自己的FIFO 称为TXFIFO 和RXFIFO。 这些FIFO 被用于除了单接收+CRC 模式外的所有的SPI 模式(主从);
不想用FIFO不行,不得不用。再说了,没有什么不好,有这个好。

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

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:我的技术博客http://blog.csdn.net/cy757/ 博客关键词:STM32的USB、TCP,wince,C#,VC

103

主题

161

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部