STM32L072 多路ADC DMA方式采集电压

最近在使用STM32L072采集ADC采集电压值时遇到一个问题,采集电压值不准且两路采集会有冲突导致两路采集值偏差都较大,最后经过查阅资料发现是因为ADC采集频率的问题,ADC采集频率最好小于8M,修改配置后ADC采集正常。

CubeMx配置如下:
SYS配置
ADC基本配置
ADC配置2

DMA配置
时钟配置
main.c

uint32_t AD_Value[2] = {0};
float ADC_0,ADC_1;
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC_Init();
  /* USER CODE BEGIN 2 */
	HAL_Delay(1000);
	printf("start ....\r\n");
	HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED);
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
			int16_t rawData = 0;
		float voltage = 0;
		float voltage_1 = 0;
		uint8_t channel = 0;

  while (1)
  {
			
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

		
		HAL_ADC_Start_DMA(&hadc,(uint32_t*)&AD_Value,2);
		HAL_Delay(100);

		printf("ADC0 %d %.2f ADC1 %d %.2f\r\n",AD_Value[0],ADC_0*2,AD_Value[1],ADC_1*10);
		memset((uint8_t *)AD_Value,0,4);
		ADC_0 = ADC_1 = 0;
		HAL_Delay(1000);
		
		run_index++;
		if (run_index == 20)
		{
			run_index = 0;
			HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED);
		}
  }
  /* USER CODE END 3 */
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
	ADC_0 = AD_Value[0]*3.3/4095;
	ADC_1 = AD_Value[1]*3.3/4095;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值