使用cubeMX完成STM32定时器触发多通道adc并用DMA读取的功能

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gongyuan073/article/details/86500673

cubeMX 5.0.1

KEIL 5.26

compiler: v6.10.1

 

cubeMX中设置:

定时器:

ADC:

开启通道1和通道2

DMA:

 

main.c

	HAL_TIM_Base_Start(&htim8);
	HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&adc_val[0], 2);


    while(1)
    {
        //及时把数据拷贝走,不然会被覆盖
		if (adc_dma_cnt_last != adc_dma_cnt)
		{
//			for (i = 0; i < 2; i++)
//				printf ("%d %d\r\n", adc_dma_cnt, adc_val[i]);
			adc_ch0[adc_ch0_index] = adc_val[0];
			adc_ch1[adc_ch1_index] = adc_val[1];
  
			adc_ch0_index++;
			adc_ch1_index++;
			
			adc_dma_cnt_last = adc_dma_cnt;
//			if (adc_dma_cnt > 500)
//				adc_dma_cnt = 0;
		}
    }

adc.c

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{

//	adc_val[adc_index] = HAL_ADC_GetValue(&hadc1);
	adc_index++;
		adc_dma_cnt++;
//	printf ("adc_irq\r\n");
	if (adc_index > 33)
	{
		
		adc_conv_f = 1;
		HAL_TIM_Base_Stop_IT(&htim8);
	}
//	else
//	{
//		HAL_TIM_Base_Start_IT(&htim8);
//	}	
}

 

展开阅读全文

没有更多推荐了,返回首页