楼主,代码中没有判断HT的状态,也就是HT的状态也就没有被清除掉,加上HT的判断,是不是在传输一半是产生中断。
安 发表于 2016-11-7 15:58
楼主用的哪个CPU。
#define DMA_BUFF_SIZE 500
这是源码
安 发表于 2016-11-7 16:03
楼主,代码中没有判断HT的状态,也就是HT的状态也就没有被清除掉,加上HT的判断,是不是在传输一半是产生中 ...
DMA_ClearITPendingBit(DMA1_IT_GL1);这一句就是把 TCHT TE三个DMA中断标志都清掉了
安 发表于 2016-11-7 16:03
楼主,代码中没有判断HT的状态,也就是HT的状态也就没有被清除掉,加上HT的判断,是不是在传输一半是产生中 ...
DMA_ClearITPendingBit(DMA1_IT_GL1);这一句就是把 TCHT TE三个DMA中断标志都清掉了
楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完最后关闭。先测试一下HT和TC是否能正常传输。
安 发表于 2016-11-7 16:08
楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完 ...
TC正常 HT第一次是在传输一半中断后面就变成一直是全部传输中断。
安 发表于 2016-11-7 16:08
楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完 ...
还是一样, 变成了每次都全部传输
安 发表于 2016-11-7 16:08
楼主想实现的是输出一半进行一次中断,传输完成产生一次中断,是吗?
进入中断后,不要先关闭DMA,等处理完 ...
最开始发现问题是这样的, 我设置AD采样,采样周期2.2us采样一次, 然后用DMA的方式,结果发现没中断一次需要920us,而我只设置了传输一半中断,buff大小500,也就是采250个AD就中断, 时间应该=250*2.2us=500多us。 时间上差了一倍。然后我就改成全部传输完成中断, 结果时间还是920us,明显出问题了
清除中断的时候,单独清除试试。
安 发表于 2016-11-7 16:22
清除中断的时候,单独清除试试。
还是不行,我跑下Cube的例程吧