ADC单次转换ADC复位是干什么用的?

2019-07-20 06:16发布

ADC单次转换ADC复位是干什么用的,先使能复位,后失能复位,不太懂,为什么要这样,我这边移植的原子例程,加上复位的函数,ADC不能正常使用,不加可以正常使用。为什么?还有个问题是,每次单次转换,我用的是通道4,5,分别转换之后用串口输出,正好通道4是通道5的结果,通道5是通道4的结果,好奇怪??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
冰果run
1楼-- · 2019-07-20 09:22
void ADC_Configuration(void)
{
GPIO_InitTypeDef   GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
ADC_InitTypeDef        ADC_InitStructure;
//①开启 ADC 和 GPIO 相关时钟和初始化 GPIO
//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能 GPIOA 时钟
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能 ADC1 时钟
//先初始化 ADC1 通道 5 IO 口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5;//PA5  通道 5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);    //ADC1 复位    复位操作使能加上不能用,上下屏蔽这句话可以用
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);  //复位结束
//②初始化通用配置
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
ADC_CommonInitStructure.ADC_TwoSamplingDelay =ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟 5 个时钟
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA 失能
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频 4 分频。
//ADCCLK=PCLK2/4=84/4=21Mhz,ADC 时钟最好不要超过 36Mhz 
ADC_CommonInit(&ADC_CommonInitStructure);//初始化
//③初始化 ADC1 相关参数 
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12 位模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式
ADC_InitStructure.ADC_ContinuousConvMode =DISABLE;//关闭连续转换
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
//禁止触发检测,使用软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
ADC_InitStructure.ADC_NbrOfConversion = 1;//1 个转换在规则序列中
ADC_Init(ADC1, &ADC_InitStructure);//ADC 初始化
//④开启 ADC 转换
ADC_Cmd(ADC1, ENABLE);//开启 AD 转换器 

}
 u16 Get_Adc(u8 ch)   
{
//设置指定 ADC 的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1,ch, 1, ADC_SampleTime_480Cycles );     
ADC_SoftwareStartConv(ADC1);    //使能指定的 ADC1 的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC1);  //返回最近一次 ADC1 规则组的转换结果
}

int main(void)
{
u16 ad_4,ad_5;
BSP_Init();
delay_init();
while(1)
{
ad_4=Get_Adc(4);
delay_ms(10);
ad_5=Get_Adc(5);
USART_OUT(USART1,"ad_4=%d ",ad_4);
  USART_OUT(USART1,"ad_5=%d ",ad_5);
USART_OUT(USART1," ");
GPIO_ToggleBits(GPIOB, GPIO_Pin_12);
delay_ms(500);
// GPIO_ResetBits(GPIOB,GPIO_Pin_12);
// delay_ms(500);  //系统滴答时钟    nms<=798   stm32f407
// GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
}
冰果run
2楼-- · 2019-07-20 11:32
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 12:43
帮顶....
冰果run
4楼-- · 2019-07-20 16:30
回复【4楼】正点原子:
---------------------------------
原子个,ADC那块复位是什么意思
正点原子
5楼-- · 2019-07-20 19:08
 精彩回答 2  元偷偷看……
冰果run
6楼-- · 2019-07-20 20:12
回复【6楼】正点原子:
---------------------------------
是的

一周热门 更多>