
在用F407Discovery做外部高速ADC实验,把外部AD的转换结果,通过DMA传输到内存中,使用外部时钟来触发DMA。 把200次的转换结果储存到一个数组中。传输长度设置为为200,储存器地址递增。 问题是每触发一次DMA,DMA都会把同一个转换结果,传输到数组中,数组的里面都是同一个结果。也就是说DMA是触发一次,就完成了200次传输,结果如下图。 ![]() 如果希望,触发一次DMA,传输一次结果。结果是内存地址不能递增,每次结果都储存在了数组中的第一个元素。 结果如下图 ![]() 请教大神们,怎么设置DMA才能触发一次传输一次转换结果,每次传输的目的地址递增,把200个不同时刻AD的转换结果储存到数组中 呢? |
在CUBEMX生成的STM32F407VET6的I2S主机接收模式与I2S主机发送模式能正常运行,如何进行动态调整或者如何实现主机全双工?
STM32F407 多机RS485串口通讯+地址位唤醒+DMA空闲线接收,无法进入中断服务程序。
设置RDP等级为2的同时,有什么办法可以确保后续还能够烧录程序
STM32F407VET6 I2S 采用DMA传输问题
有STM32F4倒车雷达响应例程吗?
STM32F429I倒车雷达响应
STM32多通道FFT运算异常
在其他电脑上编译成功没有错误并且能够烧录,换了电脑之后编译出现一堆错误,并且不能烧录程序
SD卡初始化第一次初始化后再次初始化时会失败。
串口重定向接收不同
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位数据传输 指针的递增就是正确的 怎样设置??