- UID
- 1029342
- 性别
- 男
|
/** @date
2013/8/28
@author
Mei Jilin
@brief
ADC1的配置完成3通道的数据采集
@attention
1 ----------- adc_config(); //配置adc
2 ----------- adc_start(); //启动adc,开始转换
3 ----------- get_ChannelValue(ADC_Channel_x); //读取相应通道的adc值
**/
#include "stm32f10x.h"
#include "adc.h"
#define CH_NUM 3 //要使用的ADC通道数
static uint16_t ad_value[CH_NUM]={0};
/** @para none
* @ret none
* @brief adc对应的gpio初始化
*/
void adc_gpio_init(void)
{
GPIO_InitTypeDef gpio;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
gpio.GPIO_Mode = GPIO_Mode_AIN; //配置为模拟输入
gpio.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; //ADC1 --channel0,1,2
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpio);
}
/** @para none
* @ret none
* @brief adc配置
*/
void adc_init(void)
{
ADC_InitTypeDef adc;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ad时钟为72/6=12M,ad最大时钟频率为14M
ADC_DeInit(ADC1);
adc.ADC_Mode = ADC_Mode_Independent; //工作在独立模式
adc.ADC_ContinuousConvMode = ENABLE; //连续转换模式
adc.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐
adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不使用外部触发
adc.ADC_NbrOfChannel = CH_NUM ; //转换3个通道
adc.ADC_ScanConvMode = ENABLE; //连续转换模式
ADC_Init(ADC1,&adc);
//设定指定的ADC通道组,设置转化顺序和采样时间
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_SampleTime_55Cycles5);
//开启adc的DMA
ADC_DMACmd(ADC1,ENABLE);
//使能ADC1
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibaration register */
ADC_ResetCalibration(ADC1);
//重新校准
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1)); //等待重新校准完成
/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
//开始校准
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
//等待校准完成
} |
|