打印
[STM32F1]

STM32F103 ADC 多通道采集数据不对。

[复制链接]
112|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
li781121|  楼主 | 2025-5-22 17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103 ADC1 使用IN1,IN4做ADC输入,ADC工作在中断模式,没有用DMA,在回调函数里读出的数据不是预期数据,有时读入的数据IN1的,有时读入的数据IN4的,,请高手指点哪里出问题。
代码下:
void MX_ADC1_Init(void)
{

  /* USER CODE BEGIN ADC1_Init 0 */
#include "Userinclude.h"
  /* USER CODE END ADC1_Init 0 */

  ADC_ChannelConfTypeDef sConfig = {0};

  /* USER CODE BEGIN ADC1_Init 1 */

  /* USER CODE END ADC1_Init 1 */

  /** Common config
  */
  hadc1.Instance = ADC1;
  hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  hadc1.Init.ContinuousConvMode = DISABLE;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.NbrOfConversion = 2;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_1;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_4;
  sConfig.Rank = ADC_REGULAR_RANK_2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN ADC1_Init 2 */

  /* USER CODE END ADC1_Init 2 */

}

       
#define ADC1_CHANNELS    2            // ADC1通道数量       
uint16_t adc1_1value=0,adc1_2value=0; //ADC转换数据存储变量

       
        /* ADC转换完成中断回调函数 */
       
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
       
  static uint16_t channelIndex=0;
  uint16_t adc1_value;
  if(hadc->Instance == ADC1)
  {
    /* 获取通道1和通道4的转换结果 */
    adc1_value= HAL_ADC_GetValue(&hadc1); // 通道结果
                //adc1_value= HAL_ADC_GetValue(&hadc1); // 通道结果
                //LED1out(1);
    switch (channelIndex)
      {
        case 0:
        {
                                        adc1_1value=adc1_value;
                                       
        }
        break;

        case 1:
        {
                                        adc1_2value=adc1_value;
                                       
        }
        break;
                               
        default:
        {
        }
                        }
                  
    channelIndex = (channelIndex + 1) % ADC1_CHANNELS; // 切换到下一个通道
          
    if (channelIndex == 0)    //完成了所有通道的转换
                {
     // HAL_ADC_Start_IT(&hadc1); //启动ADC转换(规则组)
    }
  }       
}



void ADC1_2Start(void)  //启动ADC转换(规则组)
        {
               
    if(HAL_ADC_Start_IT(&hadc1) != HAL_OK)
    {
      Error_Handler(); // 错误处理
    }
               
        }

使用特权

评论回复
沙发
li781121|  楼主 | 2025-5-22 23:45 | 只看该作者
有没有高手帮帮忙呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

16

帖子

0

粉丝