【无标题】ADC转换值为什么会在3000左右

本文详细介绍了ADC数模转换的基础知识,并特别关注ADC通道从下标0开始进行转换的情况。此外,文章还提到了如果输入出现错误,转换后的数值通常会在3000左右这一现象。

ADC数模转换,ADC通道由下标0开始转换

 

 如过输入错误,转换值会在3000左右

 

stm32f407的PA2,我打开了ADC1的通道2,并将数据通过oled打印出来其读取到的数据,oled上显示这个为1000左右,是什么原理?代码如下: void TDS_Init() { GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_AHB1PeriphClockCmd(TDS_GPIO_CLK, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟 GPIO_InitStructure.GPIO_Pin = TDS_GPIO_PIN;//PA2 通道2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉 GPIO_Init(TDS_GPIO_PORT, &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_Div6;//预分频6分频 ADC_CommonInit(&ADC_CommonInitStructure);//初始化 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个转换在规则序列中 也就是只转换规则序列1 ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化 ADC_Cmd(ADC1, ENABLE);//开启AD转换器 } float TDS_Get_Adc(u8 ch) { //Sets the specified ADC rule group channel, one sequence, and sampling time //设置指定ADC的规则组通道,一个序列,采样时间 //ADC1,ADC通道,采样时间为480周期 ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_480Cycles ); //Enable the specified ADC1 software transformation startup function //使能指定的ADC1的软件转换启动功能 ADC_SoftwareStartConv(ADC1); //Wait for the conversion to finish //等待转换结束 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )); //Returns the result of the last ADC1 rule group conversion //返回最近一次ADC1规则组的转换结果 return ADC_GetConversionValue(ADC1); } int main(void) { systemInit(); //Hardware initialization //硬件初始化 Buzzer = 1; delay_ms(500); //延迟等待初始化完成 Buzzer = 0; while(1) { delay_ms(200); LED = ~LED; TDS_value = TDS_Get_Adc(ADC_CHANNEL_TDS); Oled_Show(); } }
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值