stm32ADC转换问题

Yolk、 2019-07-31 10:13:19
stm32ADC单通道转换只有两个io口可以正常使用(通道1.2可以使用),当使用通道2以上时,io口无法采集数据,新手,求大佬解答
...全文
197 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
GlenXu_007 2019-08-08
  • 打赏
  • 举报
回复
确定你的CPU有ADC1、2以外的其它口!?
Yolk、 2019-08-02
  • 打赏
  • 举报
回复
大佬们,有新的发现了,我测试了ADC1所有通道,发现只有PA2一个口不能接收数据,换了块新板子也一样
Yolk、 2019-08-01
  • 打赏
  • 举报
回复
引用 4 楼 啃馒头的回复:
你怎么知道 无法采集数据的话
看你的程序没有提取数据啊
在你的主循环中
adcx=Get_Adc(ADC_Channel_2);
t=(float)adcx*(3.3/4096);
你这个提取的是哪个管脚的
PA2管脚啊ADC通道2对应的就是PA2.管脚吧
啃馒头 2019-08-01
  • 打赏
  • 举报
回复
你怎么知道 无法采集数据的话
看你的程序没有提取数据啊
在你的主循环中
adcx=Get_Adc(ADC_Channel_2);
t=(float)adcx*(3.3/4096);
你这个提取的是哪个管脚的
yishumei 2019-08-01
  • 打赏
  • 举报
回复
初始化时设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;对应采集ADC_Channel_2(adcx=Get_Adc(ADC_Channel_2);)没有问题啊
Yolk、 2019-08-01
  • 打赏
  • 举报
回复
那这个问题要怎么解决啊代码三天了都没动
Yolk、 2019-07-31
  • 打赏
  • 举报
回复


#include "ADC.h"
{ 	
	ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_ADC1	, ENABLE );	  //ʹÄÜADC1ͨµÀʱÖÓ
 
RCC_ADCCLKConfig(RCC_PCLK2_Div6); 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//Ä£ÄâÊäÈëÒý½Å
	GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_DeInit(ADC1);

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;
ADC_Init(ADC1, &ADC_InitStructure);

	ADC_Cmd(ADC1, ENABLE);	
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);	
	while(ADC_GetCalibrationStatus(ADC1));
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);	
}


u16 Get_Adc(u8 ch) 
{ADC_RegularChannelConfig(ADC1, ch,1, ADC_SampleTime_239Cycles5 );	
ADC_SoftwareStartConvCmd(ADC1, ENABLE);	
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC1);
}

//主程序


#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "ADC.h"
#include "LED.h"
#include "math.h"
#include "delay.h"
int main(void)
 {	u16  adcx;	 
float t;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init();
uart_init(115200);
 LED_Init();
	 Adc_Init();
  while(1)
	{
adcx=Get_Adc(ADC_Channel_2);
		t=(float)adcx*(3.3/4096);
	if (t<1)
		LED0 = 1;
		else
			LED0=0;
	}	 
} 
 
--*--king--*-- 2019-07-31
  • 打赏
  • 举报
回复
检查其他通道引脚有没有被占用。最好把代码发上来,不然不好定位问题

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧