这个帖子继续演示ADC 基于DMA 获取数据。。
ADC 使用12Mhz 时钟源。。F1 ADC不要超过14Mhz 就可以。。
进入配置ADC。。
ADC DMA 配置 需要注意的是:
ScanConvMode = ADC_SCAN_ENABLE;
ContinuousConvMode = ENABLE;
NbrOfConversion = 4;
然后每个通道,对于好rank 就可以
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
需要注意:
DMA_PERIPH_TO_MEMORY;设备到内存
DMA_PDATAALIGN_WORD;32位
DMA_MDATAALIGN_WORD;32位
Mode = DMA_CIRCULAR;循环
配置好后,就生成文件。。就可以。。然后在keil下添加程序。。
uint32_t uhADCxConvertedValue[4]; 用4组32位变量存储DMA 转换过来的数据。。
HAL_ADCEx_Calibration_Start(&hadc1); 开启F1 ADC校准
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&uhADCxConvertedValue, 4); 开启HAL ADC DMA 转换后可以不用管了。。DMA自动把数据帮你转换到uint32_t uhADCxConvertedValue[4];
编译后,就可以下载到单片机里了。。
下图是,演示效果。。。
这里是原程序:
|