使用adc不同通道,从而有更多引脚可以作为adc输入

首先正常配置adc1的多个通道

并选择不生成function

 

 将adc.c文件中的MX_ADC1_Init改写为MY_ADC1_Init,并将其中的channel部分注释掉。

//adc初始�????
void MY_ADC1_Init(void)
{



	  /* USER CODE BEGIN ADC1_Init 0 */

	  /* USER CODE END ADC1_Init 0 */

	  ADC_MultiModeTypeDef multimode = {0};
	  ADC_ChannelConfTypeDef sConfig = {0};

	  /* USER CODE BEGIN ADC1_Init 1 */

	  /* USER CODE END ADC1_Init 1 */

	  /** Common config
	  */
	  hadc1.Instance = ADC1;
	  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
	  hadc1.Init.Resolution = ADC_RESOLUTION_16B;
	  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
	  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
	  hadc1.Init.LowPowerAutoWait = DISABLE;
	  hadc1.Init.ContinuousConvMode = DISABLE;
	  hadc1.Init.NbrOfConversion = 1;
	  hadc1.Init.DiscontinuousConvMode = DISABLE;
	  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
	  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
	  hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
	  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
	  hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
	  hadc1.Init.OversamplingMode = DISABLE;
	  if (HAL_ADC_Init(&hadc1) != HAL_OK)
	  {
	    Error_Handler();
	  }

	  /** Configure the ADC multi-mode
	  */
	  multimode.Mode = ADC_MODE_INDEPENDENT;
	  if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
	  {
	    Error_Handler();
	  }

//	  /** Configure Regular Channel
//	  */
//	  sConfig.Channel = ADC_CHANNEL_11;
//	  sConfig.Rank = ADC_REGULAR_RANK_1;
//	  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
//	  sConfig.SingleDiff = ADC_SINGLE_ENDED;
//	  sConfig.OffsetNumber = ADC_OFFSET_NONE;
//	  sConfig.Offset = 0;
//	  sConfig.OffsetSignedSaturation = DISABLE;
//	  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
//	  {
//	    Error_Handler();
//	  }
	  /* USER CODE BEGIN ADC1_Init 2 */

	  /* USER CODE END ADC1_Init 2 */

}

将注释掉的channel配置部分放到函数 Get_adc1_value(uint32_t ch)里。并更改channel

uint16_t Get_adc1_value(uint32_t ch)
{
uint16_t adc_Value=0;//out电压
ADC_ChannelConfTypeDef sConfig = {0};

	  sConfig.Channel = ch;
	  sConfig.Rank = ADC_REGULAR_RANK_1;
	  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
	  sConfig.SingleDiff = ADC_SINGLE_ENDED;
	  sConfig.OffsetNumber = ADC_OFFSET_NONE;
	  sConfig.Offset = 0;
	  sConfig.OffsetSignedSaturation = DISABLE;
	  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
	  {
	    Error_Handler();
	  }
    if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
    {
        Error_Handler();
    }
 HAL_ADC_Start(&hadc1);
    if(HAL_OK==HAL_ADC_PollForConversion(&hadc1,10))
       {
         HAL_ADC_Stop(&hadc1);
         adc_Value=HAL_ADC_GetValue(&hadc1);
	 }

     return adc_Value;
}

在main.c文件中

#include "adc.h"

并在主函数中初始化adc1   

 MY_ADC1_Init();

即可使用该函数。 

 int a= Get_adc1_value(ADC_CHANNEL_11);
	 int b= Get_adc1_value(ADC_CHANNEL_4);


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值