我的程序是这样配置的
时钟 开启--
/****** ADC初始化 ********
--通道数 9 采集10次
--DMA循环采集
**************************/
DMA1_Channel1->Config(
true, //使能
ADChannelNum*ADGetTimes, //传输数据数量
DMAChannelType::Circular, //循环模式
(u32)&ADC1->DR, //外设地址
(u32)&ADValues, //内存地址
DMAChannelType::ReadFromPhi, //传输方向
false, //外设增量
true, //内存增量
DMAChannelType:  _16b, //外设数据宽度
DMAChannelType:  _16b, //内存数据宽度
DMAChannelType:  _L, //优先级
DMAChannelType::Null //中断禁止
);
ADC1->Config(ADChannelNum);
ADC1->RegularChannelConfig( ADCType::Chn_5, 1 );
ADC1->RegularChannelConfig( ADCType::Chn_4, 2 );
ADC1->RegularChannelConfig( ADCType::Chn_1, 3 );
ADC1->RegularChannelConfig( ADCType::Chn_0, 4 );
ADC1->RegularChannelConfig( ADCType::Chn_13, 5 );
ADC1->RegularChannelConfig( ADCType::Chn_12, 6 );
ADC1->RegularChannelConfig( ADCType::Chn_11, 7 );
ADC1->RegularChannelConfig( ADCType::Chn_10, 8 );
ADC1->RegularChannelConfig( ADCType::Chn_16, 9 , ADCType::T_239p5 ); //芯片温度
ADC1->TempAndVrefEnable(true);
ADC1->DMAEnable(true);
ADC1->Enable(true);
ADC1->RegularSoftTrigEnable(true);
ADC1->RstCalibration();
while(ADC1->WaitRstCalibration());
ADC1->Calibration();
while(ADC1->WaitCalibration());
ADC1->RegularSoftTrigEnable(true);
值的处理
void Application::GetADValues(u16 *adv)
{
for(int n=0; n<ADChannelNum; n++)
{
u16 max=ADValues[n], min=ADValues[n],curr;
u32 sum = 0;
for(int i=0; i<ADGetTimes; i++)
{
curr = ADValues[n+i*ADChannelNum] ;
if(min > curr) min = curr;
if(max < curr) max = curr;
sum += curr;
}
sum -= max + min;
adv[n] = sum / (ADGetTimes-2) ;
//adv[n] = 3.3 * adv[n] / 4095 ;
}
}
在线连续运行 几个月 也没有任何异常
|