
在用F407Discovery做外部高速ADC实验,把外部AD的转换结果,通过DMA传输到内存中,使用外部时钟来触发DMA。 把200次的转换结果储存到一个数组中。传输长度设置为为200,储存器地址递增。 问题是每触发一次DMA,DMA都会把同一个转换结果,传输到数组中,数组的里面都是同一个结果。也就是说DMA是触发一次,就完成了200次传输,结果如下图。 ![]() 如果希望,触发一次DMA,传输一次结果。结果是内存地址不能递增,每次结果都储存在了数组中的第一个元素。 结果如下图 ![]() 请教大神们,怎么设置DMA才能触发一次传输一次转换结果,每次传输的目的地址递增,把200个不同时刻AD的转换结果储存到数组中 呢? |
STM32多通道FFT运算异常
串口重定向接收不同
关于三轴陀螺仪 I3G4250D
经过光耦之后,脉冲计数功能为啥不能实现?
STM32F407 ADC Dual regular simultaneous only 模式下最高采样率仅 96 kHz,960 kHz 无法工作,求助!
STM32 F407骄阳电机版用DMA双缓存接收串口数据时,上电第一次接收区是memory1而不是memory0?
STM32F407骄阳版用DMA双缓存区接收串口数据,上电第一次接收到的数据在memory1而不是memory0
stm32f407无法配置定时器2为全部dma
FreeRTOS问题求解
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
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位数据传输 指针的递增就是正确的 怎样设置??