高级会员

- 积分
- 674
- 金钱
- 674
- 注册时间
- 2020-12-5
- 在线时间
- 202 小时
|
3金钱
本帖最后由 车嘉炜 于 2020-12-24 09:31 编辑
stm32新手,最近在做ADC1六个通道采集数据+DMA存储进内存。想通过建立一个数组将采样值存进内存,代码是:u16 AD_Value[6];//定义一个数组
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; //外设地址是DR寄存器
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)AD_Value; //存储器地址是数组的地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
在此省略一些配置内容。
——————————————————————————————————————————————————————————————————————————-————————————————————-
设置ADC1的6个通道采集数据
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_239Cycles5 );
第一个问题:我比较疑惑的是这个过程是怎么样的?是每个通道各自采样一次得到一个数值共得到六个数值,然后六个ADC数形成一个数组传给内存以后再进行下一个采样点的采样吗?那么这样的话一个数组里面就是保存的不同通道的采样值吗?
第二个问题:如果我要采集一个随时变化的信号导致每次采样值会变化很大,是不是可以把数组定义成一个二维数组ADC1ConvertedValue [采样个数] [6] 6代表六个通道
第三个问题:分频后ADCCLK=14mhz,设置1.5的采样时间,那么Tconv=1.5+12.5=14周期,14/14M=1us 那么这个1um就是采样一个点所用的时间吗
希望大家赐教,不胜感激
|
最佳答案
查看完整内容[请看2#楼]
1. 每个通道完成一次转换后就被DMA传出来,因为ADC->DR只有一个,所以不是同时转换的,是转换一个传一个
|