最近公司安排了个任务,需要使用到编码器的脉冲采集,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。
STM32使用DMA功能导致程序运行不正常
最新推荐文章于 2024-10-10 11:52:29 发布