1. 小表采ADC1的三个通道CH1/ CH2/ CH3,用DMA1传送到缓冲区ADCRegValue [3] 中; 2. 然后用定进器Tim1定时中断(50*128 Hz)从ADCRegValue [3]读数据到数组ADC_ConvertedTEMP[3*128]中;
这两步似乎感觉不怎么爽,你叫我说出这里会有问题么?我也不确定,但如果自己用的话,一般就不这样了. 我宁愿是定时器中断后,就启动一次DMA(突发模式),然后再等DMA中断后,把ADCRegValue [3]数据读到ADC_ConvertedTEMP[3*128]中.这样算下来,效果和楼主的也差不多吧.
反正DMA这东西,我用有个原则,就是永远别在DMA向RAM放数据的时候随机地读这个RAM.尽管某些芯片会宣称这个临界问题不存在.但偶就是不会这么用.
想想,这个的确算是个CRITICAL哦,虽然不是软件的,呵呵~
另外呢,ADC值应该需要滤波吧.而且是中值滤波,也就是去掉一头一尾的最大最小,再作平均.这样就可以排除一些因干扰问题引起的变态数据了. |