中级会员
 
- 积分
- 416
- 金钱
- 416
- 注册时间
- 2014-2-27
- 在线时间
- 71 小时
|
5金钱
我用两个通道连续方式,在规则采样顺序为1的通道读回来的数据大概650多,然后又加了两个通道,还是连续方式读数据,但是发现原来规则采样顺序为1的通道的数据变成590多,不知道为何,下面是我的初始化程序。
void Adc_Init(void)
{
GPIO_InitTypeDef gpio;
ADC_InitTypeDef adc;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE);
gpio.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
gpio.GPIO_Mode=GPIO_Mode_AIN; //模拟输入
GPIO_Init(GPIOB,&gpio);
gpio.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
gpio.GPIO_Mode=GPIO_Mode_AIN; //模拟输入
GPIO_Init(GPIOA,&gpio);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);//复位ADC1
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);//复位结束
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADC时钟=PCLK/6=12MHz,超过14MHz精度下降
ADC_DeInit(ADC1);
adc.ADC_Mode=ADC_Mode_Independent;//ADC1 和 ADC2 工作在独立模式
adc.ADC_ScanConvMode=ENABLE;//多通道
adc.ADC_ContinuousConvMode=ENABLE;//连续模式
adc.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
adc.ADC_DataAlign=ADC_DataAlign_Right;//ADC数据右对齐
adc.ADC_NbrOfChannel=4;//顺序进行规则转换的ADC通道的数目4
ADC_Init(ADC1,&adc);
ADC_Cmd(ADC1, ENABLE);//使能ADC1
ADC_ResetCalibration(ADC1); //开启复位校准
while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束
ADC_StartCalibration(ADC1); //开启 AD 校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
ADC_DMACmd(ADC1,ENABLE);//开启ADC1的DMA功能
MYDMA_Config(DMA1_Channel1,(u32)&ADC1->DR,(u32)AD_tmp,64,DMA_Priority_Medium,DMA_DIR_PeripheralSRC);
ADC_RegularChannelConfig(ADC1,8,2,ADC_SampleTime_239Cycles5 ); //通道8,规则采样顺序值为1,采样时间为239.5周期,采样时间越长越精确
ADC_RegularChannelConfig(ADC1,9,1,ADC_SampleTime_239Cycles5 ); //通道9,规则采样顺序值为2,采样时间为239.5周期,采样时间越长越精确
ADC_RegularChannelConfig(ADC1,1,3,ADC_SampleTime_239Cycles5 ); //通道1,规则采样顺序值为3,充电
ADC_RegularChannelConfig(ADC1,2,4,ADC_SampleTime_239Cycles5 ); //通道2,规则采样顺序值为4,电量
delay_us(100);
ADC_SoftwareStartConvCmd(ADC1,ENABLE); //使能指定的 ADC1 的软件转换功能
ADC_Cmd(ADC1, ENABLE);
}
|
|