基于STM32G431开发板ADC的问题
我使用STM32G431RB开发板开通了ADC1的11、14、15三个通道,通过DMA获得转化值,存在两个问题一直没有解决,一是获得的数组数据与实际通道很难一一对应,即有时重启后会出现数组对应通道的数据会与前次不同,比方说前次数组下标0是对应14通道,而重启后有可能会对应15通道。二是得到的数值不准确,我是用杜邦线连接的,将连接全部切断后数据仍然照旧显示,只有重启后才会显示近似0值,此时再连接上杜邦线,ADC的数值并不会变化。我的代码是通过STM32CubeMX配置的,也许是我哪里配置不正确所致。基本配置的截图如下:GPIO的设置:
DMA设置:
NVIC设置:
用户常数设置:
CAD参数设置:
在程序中相关的代码:
DAM数组定义:
uint32_t adc_buff;
uint16_tadc_val;//存放10组数据及平均值
主程序中的相关代码:
HAL_ADCEx_Calibration_Start(&hadc1,1); //开启自动校准
HAL_ADC_Start_DMA(&hadc1,adc_buff,3); //启动AD转换开关并使能DMA传输和中断
读取转换值的函数:
void Get_ADC_Val(uint8_t id)
{
uint8_t i;
HAL_ADC_Start_DMA(&hadc1,(uint32_t *) adc_buff,3);
HAL_ADC_ConvHalfCpltCallback(&hadc1);
for ( i=0;i<3;i++ ) //分别处理三路ADC
{
adc_val = (float)(adc_buff&0xfff)*2000/4096;//最大测量电压20V,保留两位小数
}
HAL_ADC_Stop_DMA(&hadc1);
}
请教各位看看我的设置有哪些问题,谢谢!
这是主程序中调取ADC数据和计算平均值的代码:
//ADC处理
adc_id++;
if(adc_id > 9) adc_id = 0;
Get_ADC_Val(adc_id); //读取adcl转换数据,存放在id下标数组中
for( i=0; i<3; i++){
adc_val = 0; //计算10次测量的平均值
for( j=0; j<10; j++){
adc_val += adc_val;
}
adc_val = adc_val / 10;
}
是不是开启的通道不连续的问题?我目前开通的是11、14和15三个通道。 经过上网搜索,对比各项设置,已经基本解决了问题。由于反复修改,目前尚不清楚究竟是哪里设置不正确,还待慢慢对比截图。
页:
[1]