资源描述:
《STM32 ADC在DMA中断模式下多通道数据采集》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本程序实现STM32DMA中断模式下ADC多通道数据采集,并经过简单的均值滤波,亲测可用。若有错误之处,希望读者指出,大家共同学习,一起进步!ADC.C文件vu16AD_Value[N][M];//[50][4]用来存放ADC转换结果,也是DMA的目标地址vu16After_filter[M];//用来存放求平均值之后的结果vu16Vtemp_sensor[M];//电压转换完成后的实际电压值//初始化ADC//这里我们仅以规则通道为例//我们默认将开启通道0~3voidAdc_Init(void){ADC_InitType
2、DefADC_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
3、RCC_APB2Periph_ADC1,ENABLE);//使能ADC1通道时钟/*ConfigureADCCLKsuchasADCCLK=PCLK2/6*/RCC_ADCCLKConfig(RCC_PCLK2_Div6);//72M/6=12,ADC最大时间不能超过14M//PA0/1/2/3作为模拟通道输入引脚GPIO_In
4、itStructure.GPIO_Pin=GPIO_Pin_0
5、GPIO_Pin_1
6、GPIO_Pin_2
7、GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入引脚GPIO_Init(GPIOA,&GPIO_InitStructure);ADC_DeInit(ADC1);//将外设ADC1的全部寄存器重设为缺省值/*ADC1configuration------------------------------------------------------*
8、/ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode=ENABLE;//扫描模式,各个通道均扫描完后EOC才置位DISABLE;//模数转换工作在单通道模式ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//ENABLE连续转换模式DISABLE模数转换工作在单次转换模式ADC_InitStructure.ADC_
9、ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel=M;//1;//顺序进行规则转换的ADC通道的数目ADC_Init(ADC1,&ADC_InitStructure);//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器//为了能够正确配置每一个
10、ADC通道,在调用ADC_Init()之后,必须调用ADC_ChannelConfig()//来配置每个所使用通道的转换次序和采样时间ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_Samp
11、leTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_3,4,ADC_SampleTime_55Cycles5);//开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)ADC_DMACmd(ADC1,ENABLE);ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1,ADC开始工作/*EnableADC1resetcalibarationregister*/ADC_ResetCalibration(ADC1);//重置指定的
12、ADC1的校准寄存器/*ChecktheendofADC1resetcalibrationregister*/while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC1重置校准寄存器的状态,设置状态则等待/*StartADC1calibarati