OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4166|回复: 6

STM32F072 非DMA采集ADC,只能采集到前面第一个通道数据

[复制链接]

21

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
751
金钱
751
注册时间
2012-4-27
在线时间
194 小时
发表于 2021-11-25 09:10:17 | 显示全部楼层 |阅读模式
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;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2021-11-25 09:46:34 | 显示全部楼层
回复

使用道具 举报

21

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
751
金钱
751
注册时间
2012-4-27
在线时间
194 小时
 楼主| 发表于 2021-11-25 10:13:25 | 显示全部楼层
可惜呀,下载不了
回复

使用道具 举报

3

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-8-5
在线时间
11 小时
发表于 2021-11-25 10:55:20 | 显示全部楼层
要求速度就用dma,不要求速度就手动切换通道后重新启动adc查询 标志位后再读取。
回复

使用道具 举报

21

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
751
金钱
751
注册时间
2012-4-27
在线时间
194 小时
 楼主| 发表于 2021-11-25 11:15:57 | 显示全部楼层
现在的问题是,如果我直接读AD4可以正常读到数据,但只要我读取一次AD4前面通道的数据,再读AD4就只能读到最小通道的那个数据,就是每次只能读到最小通道的那个数据,加了延时也不行
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-11-25 11:44:09 | 显示全部楼层
用连续转换
回复

使用道具 举报

21

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
751
金钱
751
注册时间
2012-4-27
在线时间
194 小时
 楼主| 发表于 2021-11-27 08:49:15 | 显示全部楼层
哪位大神有碰到过类似问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 02:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表