OpenEdv-开源电子网

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

STM32F4 TIM1控制定时采集SPI+DMA(外置ADC)数据出错

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-12-1
在线时间
13 小时
发表于 2022-1-17 22:02:52 | 显示全部楼层 |阅读模式
16金钱
本帖最后由 wanyahui79 于 2022-1-18 11:14 编辑

STM32  的 TIM  定时启动  SPI  传输?  哪位仁兄能给点建议吗?通过DMA,该如何配置呢? 我的应用是要  与 外面 高速(1us)AD芯片相连,通过SPI DMA驱动,定时1us启动一次,即1us发生一个SPI DMA请求。
一路是:
定时器TIM1触发DMA,向 SPI-DR 寄存器写数据,目的是启动该SPI 的接收功能(因为SPI的收发是同时、同步的);
同时定时器输出PWM波形,触发外部芯片的动作,比如启动AD采集新数据。

另一路是:
该 SPI 的 RX 事件触发 DMA,目的是把 SPI 接收到的数据搬移到其他地方。

可是触发一次TIM1的SPI写启动SPI读,一次都快把SPI+DMA读的数据量给读满了。根本不是触发一次读一次,该怎么办啊?求大佬。

SPI_I2S_DMACmd(SPI1, SPI_DMAReq_Rx, ENABLE);
不是RXNE触发一次读,清除标志位么?

最佳答案

查看完整内容[请看2#楼]

建议不要CS和SCK分开控制。 要嘛一直片选有效, 要嘛用SPI硬件片选试试看。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-1-17 22:02:53 | 显示全部楼层
wanyahui79 发表于 2022-1-19 10:39
是SPI产生的时钟信号,由定时器PWM产生CS信号并且由DMA写SPI启动一次SPI读。读完不应该直接清除RXNE信号 ...

建议不要CS和SCK分开控制。 要嘛一直片选有效, 要嘛用SPI硬件片选试试看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-12-1
在线时间
13 小时
 楼主| 发表于 2022-1-18 10:05:30 | 显示全部楼层
参考的帖子是这个:http://www.openedv.com/forum.php ... highlight=spi%2Bdma

file:///C:/Users/WYH/Desktop/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-01-18%20100316.png     给了20个数据的缓存,少的一次更新一位,多的一次更新这么多。TIM1 UPDATE中断一次,启动就随机更新。    不知道哪里设置出错了,理论上应该没问题啊。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-12-1
在线时间
13 小时
 楼主| 发表于 2022-1-18 10:07:45 | 显示全部楼层
屏幕截图 2022-01-18 100316.png 就是随机在更新。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-1-19 01:54:30 | 显示全部楼层
测量下波形吧。 你这个应该可以用SPI自己产生的SCK啊, 并不用定时器去产生时钟。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-12-1
在线时间
13 小时
 楼主| 发表于 2022-1-19 10:39:39 | 显示全部楼层
正点原子 发表于 2022-1-19 01:54
测量下波形吧。 你这个应该可以用SPI自己产生的SCK啊, 并不用定时器去产生时钟。

是SPI产生的时钟信号,由定时器PWM产生CS信号并且由DMA写SPI启动一次SPI读。读完不应该直接清除RXNE信号,然后等待定时器下一次动作再读嘛,结果定时器只动作一次,SPI+DMA读把缓存都给读完了(产生了好几次读),不等下一次定时器动作了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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