OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4507|回复: 2

PB0,PB1,PC5作为ADC1的8、9、15通道,为什么不行?下列程序配置是否有问题,请教下

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-1-13
在线时间
1 小时
发表于 2015-1-28 14:31:10 | 显示全部楼层 |阅读模式
5金钱

void  Adc_Init(void)
{  
 ADC_InitTypeDef ADC_InitStructure;
 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1 , ENABLE );   //????ADC1?¨???±??
 

 RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //?è??ADC·????ò×?6 72M/6=12,ADC×??ó?±??????????14M

 //PB0\1 ×÷???????¨??????????                        
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //????????????
 GPIO_Init(GPIOB, &GPIO_InitStructure); 
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //????????????
 GPIO_Init(GPIOC, &GPIO_InitStructure); 
  

 ADC_DeInit(ADC1);  //????ADC1,?????è ADC1 ???????????÷???è???±????

 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC?¤×÷????:ADC1??ADC2?¤×÷??????????
 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??????????
 ADC_InitStructure.ADC_NbrOfChannel = 1; //???ò???????ò×?????ADC?¨????????
 ADC_Init(ADC1, &ADC_InitStructure); //?ù??ADC_InitStruct?????¨???????????????èADCx???????÷  

 
 ADC_Cmd(ADC1, ENABLE); //???????¨??ADC1
 
 ADC_ResetCalibration(ADC1); //??????????×? 
 
 while(ADC_GetResetCalibrationStatus(ADC1)); //??????????×??á??
 
 ADC_StartCalibration(ADC1);  //????AD??×?
 
 while(ADC_GetCalibrationStatus(ADC1));  //??????×??á??
 
// ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //???????¨??ADC1???í??×???????????

}     
//????ADC??
//ch:?¨???? 0~3
u16 Get_Adc(u8 ch)  
{
   //?è?????¨ADC?????ò×é?¨?????????ò???????ù?±??
 ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC?¨??,???ù?±????239.5????         
 
 ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //???????¨??ADC1???í??×??????????? 
 
 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//????×????á??

 return ADC_GetConversionValue(ADC1); //·???×??ü????ADC1???ò×é??×????á??
}

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;
}  

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2015-1-28 14:47:40 | 显示全部楼层
有一路成功吗?配置没看出问题,不加滤波先读一路试试?
博观而约取,厚积而薄发。
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-1-28 23:03:19 | 显示全部楼层
调用函数  Get_Adc(u8 ch)   的时候  看看通道ch有没有写错   
你的配置   ch 只能是ADC_Channel_8或者ADC_Channel_9
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 06:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表