打印
[STM32F4]

DMA应用碰到奇怪的问题!

[复制链接]
385|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzzly|  楼主 | 2020-10-28 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA, AD, dc, ADC, ST
本帖最后由 yzzly 于 2020-10-29 08:23 编辑

原设计为采样二分之一周波的数据计算一次,DMA有如下的语句,工作正常(已生产了几年)
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC12_Buf+4*AdcPrNum*AdcChNum/2;       //把后二分之一周波数据向前移动二分之一周波位置,空出二分之一周波的空间等待新数据
DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&ADC12_Buf;
DMA_InitStructure.DMA_BufferSize = AdcPrNum*AdcChNum/2;               
//搬移二分之一周波数据

现为了提高响应速度,改为采样四分之一周波的数据计算一次,把以上语句改为
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC12_Buf+4*AdcPrNum*AdcChNum/4;        
//把后四分之三周波数据向前移动四分之一周波位置,空出四分之一周波的空间等待新数据
DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&ADC12_Buf;
DMA_InitStructure.DMA_BufferSize = 3*AdcPrNum*AdcChNum/4;        
//搬移四分之三周波数据


结果不正确,传输一次后就不工作了,必须改为
DMA_InitStructure.DMA_BufferSize = 3*AdcPrNum*AdcChNum/4-1;
才能跑起来,但是,由于少传输一个数据,导致最后一个通道的测试结果错误。




使用特权

评论回复
沙发
回复就哭哭| | 2020-10-30 23:43 | 只看该作者
所以说是因为少传了一个数据吗?

使用特权

评论回复
板凳
回复就哭哭| | 2020-10-30 23:44 | 只看该作者
少传了数据导致错误的吗?

使用特权

评论回复
地板
kingkits| | 2020-10-31 11:43 | 只看该作者
DMA MEMORY 貌似要4字节对齐的。可能是你这数据不对。看不到你这代码中的数据长度和起始地址。

使用特权

评论回复
5
xiaoqi000| | 2020-10-31 21:58 | 只看该作者
数据不对

使用特权

评论回复
6
xiaoqi000| | 2020-10-31 21:59 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

427

主题

1173

帖子

3

粉丝