新手入门
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2014-4-22
- 在线时间
- 0 小时
|

楼主 |
发表于 2015-6-12 16:28:55
|
显示全部楼层
贴上代码
void ADCinit(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
ADC_InitTypeDef ADC_InitStructure; //定义ADC初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能各个端口时钟,重要!!!
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //将外部AD输入挂接到引脚上
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //设置PC0引脚为模拟输入
GPIO_Init(GPIOC, &GPIO_InitStructure); //根据参数配置GPIOC端口
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立工作模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //连续转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
//软件控制转换
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //设置转换序列长度为1
ADC_Init(ADC1, &ADC_InitStructure); //根据参数初始化ADC1寄存器
// ADC_RegularChannelConfig(ADC1,ADC_Channel_12, 1, ADC_SampleTime_55Cycles5);
//采样时间等于 55.5 周期
// ADC_DMACmd(ADC1, ENABLE); //使能 ADC1 DMA 请求
ADC_Cmd(ADC1, ENABLE); //使能ADC1
ADC_ResetCalibration(ADC1); //重置指定的ADC的校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //获取ADC重置校准寄存器的状态
ADC_StartCalibration(ADC1); //开始指定ADC的校准状态
// while(ADC_GetCalibrationStatus(ADC1)); //获取指定ADC的校准状态
//
// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件转换
}
uint16 TestAdc1_10(void) //ADC1通道10
{
uint8 i;
uint32 temp = 0;
uint16 adc=0;
ADC_RegularChannelConfig(ADC1, 10, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道10,规则采样顺序值为1,采样时间为239.5周期
for(i=0; i<3; i++)
{
ADC_SoftwareStartConvCmd(ADC1,ENABLE); //试验
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET); //检查制定ADC标志位置1与否 ADC_FLAG_EOC 转换结束标志位
adc=ADC_GetConversionValue(ADC1);
temp += adc;
}
// adc=(u16)((3300*adc)/4096);//(u16)adc_num2;
return temp/3;//返回最近一次ADCx规则组的转换结果
} |
|