你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407外接24位ADC, 如何实现用ADC的DATAREADY信号触发SPI通讯接收数据?

[复制链接]
jim_weisd 提问时间:2022-10-14 18:52 / 未解决
阅读主题, 点击返回1楼
收藏 评论18 发布时间:2022-10-14 18:52
18个回答
jim_weisd 回答时间:2022-10-18 08:45:54
yr 发表于 2022-10-17 20:15
坦率地说,挺怀疑作者的说法。从逻辑上讲,spi的dma搬运应该发生在spi的dr寄存器或者fifo有收到数据后才 ...

timer捕捉到DATAREADY下降沿产生一个DMA request,这个DMA的数据源地址是SPI的数据寄存器,且MCU的SPI是主,目的地址是数组的首地址。当DMA request发起后,SPI开始发送数据,重复发送3个Byte(当接收24位ADC数据),或4个Byte(当接收32位ADC数据),同时会接收到相应长度的ADC数据。每次DATAREADY信号被ADC芯片拉低就会发起一个SPI DMA传输,接收当前ADC转换的数据,这个过程我没疑问,我担心的是,每次数据都会被搬到数组的首地址,而不是递增的地址,因为地址的递增实际上是每次传输3个Byte或4个Byte时的地址递增,而不是数组元素的地址递增。结果就是传输结束以后,数组里只有第一个元素有数据,也就是最后一次DMA传输得到的数据。不知道我这个担心是否正确,最后还得写代码验证。
butterflyspring 回答时间:2022-10-18 14:10:38
Timer 捕获事件的 DMA request 只能用来搬运捕获值的吧。 而SPI 的 DMA request 只能是 发送和接收事件的请求。
如果是外部事件触发,我看到只有 DMAMUX的外设 才可以哦。


SPI DMA REQUEST F4.png
jim_weisd 回答时间:2022-10-18 21:48:46
butterflyspring 发表于 2022-10-18 14:10
Timer 捕获事件的 DMA request 只能用来搬运捕获值的吧。 而SPI 的 DMA request 只能是 发送和接收事件的请 ...

虽然是Timer事件捕获发起DMA request,具体从哪里搬运什到哪里是由你配置该DMA数据流的数据源地址和终地址来决定的,你可以把DMA控制器的数据源地址设为SPI的外设地址,终地址设为内存数组首地址,这样就可以从外设SPI搬运到内存了。
jim_weisd 回答时间:2022-10-18 22:08:49
jim_weisd 发表于 2022-10-18 21:48
虽然是Timer事件捕获发起DMA request,具体从哪里搬运什到哪里是由你配置该DMA数据流的数据源地址和终地 ...

之所以要借用timer的事件捕捉,是因为DATAREADY 连接到GPIO端口是没有能力发起DMA request的,只能用GPIO端口的复用功能挂到timer的事件捕捉上才能发起DMA,而事件捕捉产生的DMA request并没有把数据搬运的源地址限定在timer的寄存器,你可以按照功能的需要去设置。
12
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版