在用F407Discovery做外部高速ADC实验,把外部AD的转换结果,通过DMA传输到内存中,使用外部时钟来触发DMA。 把200次的转换结果储存到一个数组中。传输长度设置为为200,储存器地址递增。 问题是每触发一次DMA,DMA都会把同一个转换结果,传输到数组中,数组的里面都是同一个结果。也就是说DMA是触发一次,就完成了200次传输,结果如下图。 如果希望,触发一次DMA,传输一次结果。结果是内存地址不能递增,每次结果都储存在了数组中的第一个元素。 结果如下图 请教大神们,怎么设置DMA才能触发一次传输一次转换结果,每次传输的目的地址递增,把200个不同时刻AD的转换结果储存到数组中 呢? |
STM32F407 USB的IN端点只能是0x81么?
mdk5添加头文件路径检索不出来文件
高主频情况下进入
高主频情况下程序运行进入HardFault_Handler
STM32F407使用DMA读取FSMC数据问题
stm32f407进入boot里,通过DFU更新程序,没有识别到usb设备
STM32F4作为SPI从机,主机发送完数据后,从机没有正确进入中断
STM32F407 USB怎么测试接口的极限速度
大佬们,请教有关串口通信问题
STM32F407ZGT6物料表面丝印问题
RE:如何让STM32F4的DMA传输目的地址递增问题
RE:如何让STM32F4的DMA传输目的地址递增问题
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable
2--关闭DMA循环模式,采用正常模式
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
你的要求中,用循环模式会出现上面的结果。
3--200次时钟触发采用一个计数器控制
这个前提是,你的 DMA_InitStructure.DMA_BufferSize =1.
目标内存:DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&b,
中,b是个数组指针
RE:如何让STM32F4的DMA传输目的地址递增问题
回复:如何让STM32F4的DMA传输目的地址递增问题
回复:如何让STM32F4的DMA传输目的地址递增问题
楼上两位的方法试过,确认不可行
在每次DMA中断中,都需要重新配置DMA的,楼主把代码贴上来看看
RE:如何让STM32F4的DMA传输目的地址递增问题
RE:如何让STM32F4的DMA传输目的地址递增问题
你这个要是用memory地址递增只能是把peripheral的数据传buffersize次。
我觉得楼主fengye5340-109024说的是可行的,你看看这样行不行:
1、在外部触发处理中设置一个静态的计数器(static uint_16 COUNTER),每次触发都自加一。
2、采用非递增模式,peripheral地址固定,而memory的地址为基址+COUNTER,buffersize设为1.
3、这样每次触发都初始一下DMA设置,不知这样是否会满足你的高速要求,但感觉影响不是很大(我的USART接受数据转存到缓存就是这么处理的,因为USART的数据寄存器就一个字节长,只能一个个转)
4、if(COUNTER>200){...},你可以根据你的需要写。
这跟直接在外部中断了读写数据有什么区别
改为
memory0BaseAddr = (uint32_t)b;
或者
memory0BaseAddr = (uint32_t)&b[0];
原因:
猜测,&b是二维指针,DMA地址递增时,使用二维指针寻址,导致b[0]之外的数组元素被略过,而将数据传送到了数组b后的位置。
猜测,楼主期望的第n(从0计)个数据应该在b+数组b元素个数*n的地址位置
STM32F4在使用SPI DMA 进行收发的时候 存储器数据长度和外设数据长度都是16位 使能存储器指针递增
按照数据手册中所说 理应每次传输指针递增两个字节 也就是刚好一个半字
但实际中递增了4个字节
单独写一个存储器到存储器 16位数据传输 指针的递增就是正确的 怎样设置??