STM32使用DMA功能导致程序运行不正常

最近公司安排了个任务,需要使用到编码器的脉冲采集,AD采集功能。单独调试这两个功能都正常,但是联合调试时,AD正常,编码器脉冲采集却出了问题,后来发现是程序中创建的一个变量的值总是被清零,后来查找发现是AD采集使用了DMA导致的问题,因为代码是从之前的项目拔下来的,没有仔细检查出的问题,出的问题在DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable这句话,由于之前的程序需要执行多次采集进行滤波,开辟的DMA的buffer size和内存中创建的buffer一样大,而你直接设置的内存地址却是与程序中其他的变量顺序保存的,导致DMA的数据直接写入到创建的其他的变量中,从而导致错误。解决方案有各种,第一种开辟与DMA的buffer size同样大小的内存。第二种方法是DMA内存不选择自增方式即DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable修改为DMA_MemoryInc_Disable。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值