OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14711|回复: 10

STM32F4的SPI用DMA发送数据不对

[复制链接]

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
发表于 2013-9-11 13:28:59 | 显示全部楼层 |阅读模式
没图说个啥,上图



上图为用示波器的单次触发模式捕捉的波形,DMA1的SPI2—TX通道,DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;改成normal模式,坛友说改成normal模式每发送一次数据要启动一次DMA,撇开这不谈。
单片机每复位一次就进行一次DMA配置,配置完后就会发送数据,数据是发送了,但是貌似只发了8个数据,0xAA,0x00,0x00,0xAA, 0x55,0x55,0x55,0x55,后面的24个数据没有发送了。DMA配置如下:



请问大神是怎么回事?

问题2是,我在程序的主函数的while循环里加入了这两句:

 DMA_Cmd(DMA_STREAM, ENABLE);
  SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);//重新启动DMA

也没看到波涛汹涌的数据发送出来,求赐教!










正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-11 15:34:58 | 显示全部楼层
回复【楼主位】yongyooh:
---------------------------------
一旦使能DMA_Cmd(Enable)数据就开始传输了。后面你再开SPI的DMA是不是反了啊。

重新启动DMA需要先DMA_Cmd(Disable),然后对DMA控制器的各个参数重新设置,相当于全新开一次DMA,最后再DMA_Cmd(Enable)启动即可。

简单一点也可以先DMA_Cmd(Disable),然后重新设置数据池地址和传输数量,最后再DMA_Cmd(Enable)启动。
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-11 15:43:47 | 显示全部楼层
回复【楼主位】yongyooh:
---------------------------------
另外还有一点要注意就是DMA的数据传输过程CPU是不插手的,也就是在数据传输过程中,继续执行DMA_Cmd(Enable)下一行程序。你用了while,相当于在DMA数据传输过程中就又开了一遍DMA,这样是错的。
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-11 16:43:51 | 显示全部楼层
回复【3楼】ricefat:
---------------------------------
 大神,那问题一是怎么回事呢?   我的数组里明明有32个数据要发送,它只发送了8个,求解惑啊
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-11 18:47:17 | 显示全部楼层
回复【4楼】yongyooh:
---------------------------------
不知道是不是你数组按u32声明的原因 换成u8试试看
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-11 19:58:49 | 显示全部楼层
回复【5楼】ricefat:
---------------------------------
 碉堡了,就是那个问题,谢谢你!英雄,交个朋友呗!
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-11 20:00:29 | 显示全部楼层


回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-11 20:01:34 | 显示全部楼层
回复【5楼】ricefat:
---------------------------------
  你看,结果出来了。我一复位单片机就看到发送出来数据了!我看了下,刚好就是数组里对应的数据。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-11-18
在线时间
0 小时
发表于 2013-11-20 19:02:18 | 显示全部楼层
兄弟,能否发你的SPI--DMA发送数据的程序给我看看     谢了!
回复 支持 反对

使用道具 举报

14

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2014-9-10
在线时间
0 小时
发表于 2015-7-30 14:15:42 | 显示全部楼层
大神能否把你的工程代码发出来看下啊
回复 支持 反对

使用道具 举报

3

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-9-25
在线时间
1 小时
发表于 2015-11-22 22:23:05 | 显示全部楼层
回复【8楼】yongyooh:
---------------------------------
你好 大神 能把你的这个源程序我给我学习下吗 我搞了一个礼拜了就是不对 我邮箱383448572@qq.com 拜托了 谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 15:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表