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-22 22:06
civic7366 发表于 2016-3-22 16:43
我就是最近有做類似的東東...我才覺得OK的...

TIM1串TIM2又串TIM4 來產生VSYNC HSYNC PCLK DATA(TIM1 DM ...

问你一下,你是怎么根据时序图来控制DMA的请求的,我纠结的地方在于:我需要拉低CS、RD,然后GPIOD->IDR才会有CH1转换的数据;然后拉高RD,再拉低RD,GPIOD->IDR才会有CH2转换的数据。。。。。。,这样的话,我应该什么时候来进行DMA的请求呢?是每得到一个CHX的数据,就进行一次DMA请求吗?
civic7366
2楼-- · 2019-07-23 00:43
我也沒辦法太詳細 因為這中間發生的問題 要一步一步去調...

TIM1_CHx產生RD 串到 TIMx_CH產生CS 這裡你就知道ARR=你發pulse的週期  CCRx=8
如果可以發pulse都用TIM1_CHx CCRx設小一點就好...  

在CCRx=8的時後設定GPIO_RD復用功能 其它時間 output功能 設high 然後就XXXX

你RD不一定CCRx要設ARR的一半 你可以設一個確定DATA已經更新的時間 然後enable DMA2的TIM1_Chx

如果你那幾隻腳都沒法改成TIM_CH 那你就只能....自己實驗抓時間 ...TIM感覺還是能用 反正RD CS也是你送的
veblen
3楼-- · 2019-07-23 05:39
civic7366 发表于 2016-3-22 17:42
我也沒辦法太詳細 因為這中間發生的問題 要一步一步去調...

TIM1_CHx產生RD 串到 TIMx_CH產生CS 這裡你 ...

谢谢civic7366,因为考虑到使用DMA结合我现在的连接电路来实现我想要的功能确实比较麻烦,我先没有使用DMA实现了AD采样,采样频率现在为25K,采样的数据还算比较稳定,当下降到20K时,数据波动有点大,估计后面可能还会有些问题,总之谢谢了

一周热门 更多>