stm32F407ADC采样配置

这几天在调试Stm32F407AD部分,需要对两路信号进行采样处理,还是运用网上推荐的DMA方式进行数据存储传送。

在配饰ADC和DMA中对AD部分有了一些深入的了解。F407AD有规格转换组和注入组,感觉两种方式没有多大的区别,暂时只用到规则组。在配饰AD时,只需要配置通道数和通道的转换顺序即可,相应的通道在芯片中已经确定,比喻PA0为通道1,PC0为通道10,这些都已经确定。

ADC_InitStructure.ADC_NbrOfConversion = 2;  总通道数,

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); 

ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 2, ADC_SampleTime_3Cycles); 设置的两路通道转换顺序, 管教PA0和PC0两路,通道0先,通道11后转换。根据硬件电路配置相应的通道。

ADC出发方式可以设置软件触发和外部定时器触发,我运用了Tim8的CC1进行触发,Tim8的配置跟普通定时器相同,配置CC1。ADC_InitStructure.ADC_ExternalTrigConvEdge =ADC_ExternalTrigConvEdge_Rising ;选择一种触发方式。

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T8_CC1;  可以是其他的定时触发。

配置扫描模式和循环模式。

 

因为要两路信号不停的进行采样,需要利用DMA进行数据传输,如果利用EOC中断可能会导致数据的错误。

在DMA进行配置时, 内存外设的大小结构要一致。在调试之初,将存储数组定义为32位,而在配置DMA时将

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  都设置成HalfWord,这样导致采样的数据出现了错位,这里设置的大小要和定义的数组大小位数相同。

 

程序是想利用DMA的传输,将两组采样数据进行切换保存在到数组中,但后来测试AD只能进行一次转换,只对通道1进行转换,转化结果正确。至此没有明白DMA内部是如何传输,传输的内存地址在何时进行增加。目前通过中断和半中断可以将采样的数据进行保存,DMA不存在错位现象,正确对数据进行采样。

 

你可能感兴趣的:(stm32学习历程)