STM32 ADC 多通道转换
描述:用 ADC 连续采集 11 路模拟信号,并由 DMA 传输到内存。ADC 配置为扫描并且连
续转换模式,ADC 的时钟配置为 12MHZ。在每次转换结束后,由 DMA 循环将转换的数据
传输到内存中。ADC 可以连续采集 N 次求平均值。最后通过串口传输出最后转换的结果。
程序如下:
#i nclude "stm32f10x.h" //这个头文件包括 STM32F10x 所有外围寄存器、位、内存映射的定
义
#i nclude "eval.h" //头文件(包括串口、按键、LED 的函数声明)
#i nclude "SysTickDelay.h"
#i nclude "UART_INTERFACE.h"
#i nclude <stdio.h>
#define N 50 //每通道采 50 次
#define M 12 //为 12 个通道
vu16 AD_Value[N][M]; //用来存放 ADC 转换结果,也是 DMA 的目标地址
vu16 After_filter[M]; //用来存放求平均值之后的结果
int i;
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //因为 USART1 管脚是以复用的形式
接到 GPIO 口上的,所以使用复用推挽式输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PA0/1/2 作为模拟通道输入引脚
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);
//PB0/1 作为模拟通道输入引脚