本帖最后由 OYT 于 2019-3-15 17:15 编辑
函数配置如下
void Adc_Init(void){
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//使能 ADC1 通道时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);
//设置 ADC分频因子6,72/6=12M ,ADC 最大时间不能超过 14M
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
//PA7 作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
//模拟输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
//初始化 GPIOA.7
GPIO_Init(GPIOA, &GPIO_InitStructure);
//复位ADC1
ADC_DeInit(ADC1);
//ADC 独立模式
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 数据右对齐
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
//顺序进行规则转换的ADC通道的数目
ADC_InitStructure.ADC_NbrOfChannel = 1;
//根据指定的参数初始化外设 ADC1
ADC_Init(ADC1, &ADC_InitStructure);
//使能指定的 ADC1
ADC_Cmd(ADC1, ENABLE);
//开启复位校准
ADC_ResetCalibration(ADC1);
//等待复位校准结束
while(ADC_GetResetCalibrationStatus(ADC1));
//开启 AD 校准
ADC_StartCalibration(ADC1);
//等待校准结束
while(ADC_GetCalibrationStatus(ADC1));
}
u16 Get_Adc(u8 ch)
{
u16 data=0;
//设置指定 ADC 的规则组通道,设置它们的转化顺序和采样时间
ADC_RegularChannelConfig(ADC1, ch,1,ADC_SampleTime_13Cycles5);
//通道 1,规则采样顺序值为 1,采样时间为 239.5 周期
//使能软件转换功能
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//等待转换结束
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
//返回最近一次 ADC1 规则组的转换结果
data=ADC_GetConversionValue(ADC1);
return data;
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
问题描述:
1.根据例程改编,使能ADC1 通道7
2.引脚有电压输入,另外通过仿真看寄存器DR,数值一直为0,导致采样数据一直为0
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
http://www.openedv.com/forum.php?mod=viewthread&tid=289461
这帖子支持串口1-3,试试
一周热门 更多>