[STM32F0] STM32F051 的 SPI /DMA 发送奇怪问题

[复制链接]
2358|5
 楼主| acgean 发表于 2014-3-2 14:23 | 显示全部楼层 |阅读模式
STM32F051R8 官方 Discovery 板
主 SPI 通过 DMA 发送的奇怪问题。
SPI 寄存器写发送已正常。 现使用 DMA.
8位传输, 查 DMA 寄存器 CCR = 0x2193(DMA使能后),设置发送长度 32字节。
一启动 SPI的 TXDMAEN,立即看到 DMA 的 CNDTR 寄存器为0了,但是没有数据发送出来。
相反,发送缓冲的前两个字节被改写成了0!
反复试验无果, 郁闷下,有意将 DMA 的方向改为从外设读(DIR 位为0), DMA 寄存器 CCR = 0x2183(DMA使能后),咦, 竟然数据出来了。但是设置32字节只出来了4个Byte。
调试跟踪发现,启动 DMA 和  TXDMAEN, DMA 的 CNDTR 寄存器为0x1D(发送了3字节,FIFO 已满,DMA 暂停,正常)但下面一使能 SPI, 马上 DMA 的 CNDTR 寄存器为0,查波形只发出了4个字节。

难道是 F0 的 BUG?
mmuuss586 发表于 2014-3-2 14:34 | 显示全部楼层
没试验过,帮顶。
airwill 发表于 2014-3-2 15:54 | 显示全部楼层
本帖最后由 airwill 于 2014-3-2 15:55 编辑

调试得很深入了, 真是个奇怪的问题, 就是论事地讲. 假如真的是 bug.

"读内存, 则发送缓冲的前两个字节被改写成了0, 写内存, 则仅能发送部分", 大胆猜测, 会不会 F0 的外设里 DMA 的 CPAR 和 CMAR 的控制逻辑搞反了? 那么干脆把地址增加的设置, CCR 里的 PINC 和 MINC 也反过来设置试试.

仅代表猜测, 希望看到楼主进一步的测试结果
baishuiyang 发表于 2014-3-2 22:03 来自手机 | 显示全部楼层
对着pdf看看吧,也许例程有bug
 楼主| acgean 发表于 2014-3-3 19:26 | 显示全部楼层
哈哈, 非常符合 三楼的猜测!
希望版主向 ST 公司核实一下, 是不是 STM32F0 的bug, 或是固件库的 BUG!
青风002 发表于 2014-3-3 19:58 | 显示全部楼层
90%是固件库的BUG
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

446

帖子

1

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