STM32 HAL ADC多通道

stm32F103c8系列的ADC ,本次选用PA2,PA3

STM32 HAL ADC多通道_第1张图片

 STM32 HAL ADC多通道_第2张图片

Scan Conversion Mode( 扫描模式 ) 使用了多个通道ENABLE就是开启扫描模式,否则DISABLE

Continuous Conversion Mode(连续转换模式) 连续转换ENABLE,不连续则DISABLE开一次转换一次

Discontinuous Conversion Mode(间断模式) 多个通道则需使能ENABLE

number of Discontinous Conversions间断模式可以让扫描的2个通道进行分成四2个组,此为配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。

STM32 HAL ADC多通道_第3张图片 

Enable Regular Conversions (启用常规转换模式)  

Number OF Conversion(转换通道数)    用了两个

Extenal Trigger Conversion Source (外部触发转换源) 选软件触发 

Rank 配置两个通道为哪个,且设置转换时间 

用print函数输出串口,则在usart.c中加入以下函数且勾选Use MicroLIB

/* USER CODE BEGIN 0 */ 
#include
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

/* USER CODE END 0 */

ADC函数

  /* USER CODE BEGIN 1 */
	uint8_t i;
	uint16_t adcBuf[2];
  /* USER CODE END 1 */

  /* USER CODE BEGIN 2 */
	HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
  /* USER CODE END 2 */

HAL_ADC_Start(&hadc1);函数必须放入for,若不是则采集第一次的ADC通道,即PA2 

  while (1)
  {
    /* USER CODE END WHILE */		
		for(i=2;i<4;i++)
		{
				HAL_ADC_Start(&hadc1); //此开始函数必须放入for,若不是则采集第一次的ADC通道,即PA2
				HAL_ADC_PollForConversion(&hadc1,0xffff);
				adcBuf[i]=HAL_ADC_GetValue(&hadc1);
				printf("PA%d:  %.4fV\r\n",i,adcBuf[i]*3.3/4096);
		}
		HAL_ADC_Stop(&hadc1);
		HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }

STM32 HAL ADC多通道_第4张图片

 

你可能感兴趣的:(STM32,单片机)