用STM32F103,对ADC编程时,觉得它的ADC配合DMA很是方便,然而,仔细一想,它不用DMA -- 多数情况下还是不行的。因为,如果多通道转换时,它的结果寄存器只有一个,如果不及时将结果移走,下一通道转换将覆盖原来的值。
如,ADC1的通道1、2、3……进行序列转换,必须在每次、每通道ADC结束后配合DMA将结果移走。而不是一个序列结束后移走。
用C2000,初看来,它没有DMA(如F28027),但是,它有16个结果寄存器,同一个ADC只要设置SOC不同,就会将产生的ADC结果放入不同的寄存器,并且,它的结果寄存器是和总线相连的,CPU读取很方便。
这样看来,STM32的ADC所用的DMA的两者之和,等同于C2000的多个结果寄存器。
然而,DMA可以设置很多个结果缓冲存储器 ,而C2000只有有限个寄存器。