STM32F4通过DMA将GPIO口输入的数据存放到SRAM中

2019-07-20 23:18发布

    最近在做一个AD的项目,AD数据线与STM32中GPIOD pin0~pin15相连,想通过DMA将GPIOD输入的数据存放到SRAM中。因为AD是在不断的进行数据转换,所以DMA的模式只能是循环模式,看STM32F4 reference manual说如果是循环模式的话,就不能是MemoryToMemory,但是PeripheralToMemory需要DMA请求源,那么怎么使用合适的请求源呢?希望大家能够给我一些建议!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
veblen
1楼-- · 2019-07-21 18:11
civic7366 发表于 2016-3-21 18:02
沒有要用到TIM_CH..把它拿來當定時器而已 (為了它的DMA_requset)

例如:

可是AD都是有个转换时间的,并不是说你给AD一个转换信号,立刻就会有数据出来(AD转换完成的标志是AD的busy引脚由高电平下降为低电平
civic7366
2楼-- · 2019-07-21 20:00
本帖最后由 civic7366 于 2016-3-21 18:41 编辑

并不是说你给AD一个转换信号,立刻就会有数据出来

所以你的ADC是你觸發一次 它轉換一次? 如果是這樣的話 你還不會設定頻率@@?

AD转换完成的标志是AD的busy引脚由高电平下降为低电平 <==這個有可能會沒固定轉換時間嗎?

而且用MtoM更奇怪...DMA沒有看到MtoM能控制傳輸時機(請求源)的register

你採樣100次 DMA收了100筆 可實際上DMA可能收了100筆同一個採樣點的資料

veblen
3楼-- · 2019-07-22 00:27
 精彩回答 2  元偷偷看……
veblen
4楼-- · 2019-07-22 00:30
civic7366 发表于 2016-3-21 18:34
并不是说你给AD一个转换信号,立刻就会有数据出来

所以你的ADC是你觸發一次 它轉換一次? 如果是這樣的 ...

另外我认为你说的MtoM是正确的,我也认为MtoM不能控制传输时机,事实上,我用MtoM正如你所说的“你採樣100次 DMA收了100筆 可實際上DMA可能收了100筆同一個採樣點的資料”
civic7366
5楼-- · 2019-07-22 02:25
一定要用DMA2 (因為你要讀IDR)

然後去看看DMA2的請求源...看看哪個能抓來應用

是我就直接勾示波器抓時間來設定了...如果之後量產測試差異很多再說了

除非連同一顆IC 時間還能變來變去 還差很多...那就無言了








veblen
6楼-- · 2019-07-22 02:43
civic7366 发表于 2016-3-22 09:43
一定要用DMA2 (因為你要讀IDR)

然後去看看DMA2的請求源...看看哪個能抓來應用

和你讨论了这么多,总之可以确定“不能使用MtoM”,但是你说的用TIM设定转换信号,然后enable DMA request,我觉得这个也似乎不可以。因为转换信号一到,同时触发DMA request,实际上这个时候AD还在转换过程中,传输过去的数据肯定不是正确的数据。

一周热门 更多>