高级会员

- 积分
- 751
- 金钱
- 751
- 注册时间
- 2012-4-27
- 在线时间
- 194 小时
|
10金钱
STM32F072 非DMA采集ADC,如果不打开前面的通道,可以正常的读到AD4通道的数据,如果我再读一次AD4通道前面的数据,如AD2通道,AD3通道,那么此时读到AD4通道的数据就是前面AD2通道或AD3通道的数据,如果程序读取了AD2通道,AD3通道,AD4通道三个数据,那么读取AD3通道,AD4通道的数据都是AD2通道的数据,请大神指导!
void ADC_Init(void)
{
ADC1_Handler.Instance=ADC1;
ADC1_Handler.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
ADC1_Handler.Init.Resolution = ADC_RESOLUTION_12B;
ADC1_Handler.Init.DataAlign = ADC_DATAALIGN_RIGHT;//右对齐
ADC1_Handler.Init.ScanConvMode = DISABLE; //非扫描模式
ADC1_Handler.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
ADC1_Handler.Init.LowPowerAutoWait = DISABLE;
ADC1_Handler.Init.LowPowerAutoPowerOff = DISABLE;
ADC1_Handler.Init.ContinuousConvMode = DISABLE;//关闭连续转换
ADC1_Handler.Init.DiscontinuousConvMode = DISABLE;//禁止不连续采样模式
ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START;//软件触发
ADC1_Handler.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
//ADC1_Handler.Init.DMAContinuousRequests = ENABLE;
ADC1_Handler.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
HAL_ADC_Init(&ADC1_Handler); //初始化
HAL_ADCEx_Calibration_Start(&ADC1_Handler); //校准ADC
}
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_ADC1_CLK_ENABLE(); //使能ADC1时钟
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOAC时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOAC时钟
__HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOAC时钟
GPIO_Initure.Pin= GPIO_PIN_1| GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5;//PC0-3
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin= GPIO_PIN_0 | GPIO_PIN_1;//PC0-3
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
GPIO_Initure.Pin= GPIO_PIN_5;//PC0-3
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
}
uint16_t Get_Adc(uint32_t ch)
{
uint16_t i;
ADC_ChannelConfTypeDef ADC1_ChanConf;
ADC1_ChanConf.Channel=ch; //通道
ADC1_ChanConf.Rank=1; //第1个序列,序列1
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_239CYCLES_5; //采样时间
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //通道配置
HAL_ADC_Start(&ADC1_Handler); //开启ADC
HAL_ADC_PollForConversion(&ADC1_Handler,10); //轮询转换
i = (uint16_t)HAL_ADC_GetValue(&ADC1_Handler); //返回最近一次ADC1规则组的转换结果
return i;
}
|
|