STM32——多路ADC通道+DMA+定时器循环采集传感器数据(一)

    本文的主要内容是使用STM32F407的ADC1来采集8路通道的传感器数据,因为要定时采集,所以使用了定时器功能,另外需要开启DMA功能。首先说一下程序的思路:使用ADC的DMA功能,将ADC数据寄存器的值通过DMA传到内存的结果数组中,这里ADC配置时使用扫描模式,连续转换模式,定时器中断函数定期去结果数组中读取结果,也就是ADC配置使能后一直在工作,然后DMA将结果存到数组中,想要结果时直接调用数组即可。接下来结合具体代码看功能是如何实现的。

    首先是ADC_DMA配置,由于项目需要所以使用了8个通道,查看数据手册找到合适引脚,大部分程序看代码后面的注释就可理解,重点的代码会另外解释。

u16 ADC_ConvertedV[Sample_Num][Channel_Num]={0};//用来存放8个通道的各5个采样值,以后用来求平均值,
                                                //Sample_Num,Channel_Num两个宏定义采样次数,通道数量																																							//DMA将ADC转换值不断地存到内存中,等待程序读取即可
void ADC_DMA_Config(void)
{
	DMA_InitTypeDef  DMA_InitStructure;
	GPIO_InitTypeDef  GPIO_InitStructure;
	ADC_CommonInitTypeDef ADC_CommonInitStructure;
	ADC_InitTypeDef       ADC_InitStructure;
	
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//使能GPIOC时钟
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能 
	

	  GPIO_Ini
  • 12
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值