没有合适的资源?快使用搜索试试~ 我知道了~
首页超详细的STM32讲解——AD单通道与多通道转换(DMA)
资源详情
资源评论
资源推荐

本程序实现 STM32 DMA 中断模式下 ADC 多通道数据采集,并经过简单的均值滤波,亲测
可用。
若有错误之处,希望读者指出,大家共同学习,一起进步!
ADC.C 文件
vu16 AD_Value[N][M]; //[50][4]用来存放 ADC 转换结果,也是 DMA 的目标地址
vu16 Aer_lter[M]; //用来存放求平均值之后的结果
vu16 Vtemp_sensor[M]; //电压转换完成后的实际电压值
//初始化 ADC
//这里我们仅以规则通道为例
//我们默认将开启通道 0~3
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); //
使能 ADC1 通道时钟
/* Congure ADCCLK such as ADCCLK = PCLK2/6 */
RCC_ADCCLKCong(RCC_PCLK2_Div6); //72M/6=12,ADC 最大时间不能超过 14M
//PA0/1/2/3 作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1); //将外设 ADC1 的全部寄存器重设为缺省值
/* ADC1 congura@on ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC 工作模式 :ADC1 和 ADC2
工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描模式,各个通道均扫描完后 EOC
才置位 DISABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_Con@nuousConvMode =ENABLE; //ENABLE 连续转换模式 DISABLE
模数转换工作在单次转换模式
ADC_InitStructure.ADC_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 的寄存器
// 为 了 能 够 正 确 配 置 每 一 个 ADC 通 道 , 在 调 用 ADC_Init() 之 后 , 必 须 调 用


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0