STM32
直播中

费加罗

9年用户 898经验值
私信 关注
[问答]

stm32F103CB AD采样输入到57mV才读出00000001怎么解决?

STM32F103CB,用AD采样,输入电压到了57mv才能读出数据00000001。57mv以下都是00000000。
用寄存器方式写的程序,
初始化:
ADC1->SR = 0x0000;                          //初始化ADC1->CR1 = 0x00000000;                     //ADC1->CR2 = 0x00000000;                     //ADC1 关闭//ADC1->CR2 |= ADC_CR2_TSVREFE;//ADC1->CR2 |= ADC_CR2_CONT;                //连续转换模式//ADC1->CR2 |= ADC_CR2_DMA;                 //使用DMAADC1->SMPR1 = 0x00000000;                   //1.5周期ADC1->SMPR1 |= ADC_SMPR1_SMP10;    //239.5周期ADC1->SMPR2 = 0x00000000;                   //1.5周期ADC1->JOFR1 = 0x00000000;                   //数据偏移ADC1->JOFR2 = 0x00000000;                   //数据偏移ADC1->JOFR3 = 0x00000000;                   //数据偏移ADC1->JOFR4 = 0x00000000;                   //数据偏移ADC1->HTR = 0x00000000;                     //高阈值ADC1->LTR = 0x00000000;                     //低阈值ADC1->SQR1 = 0x00000000;                    //ADC1转换1个通道ADC1->SQR2 = 0x00000000;                    //ADC1->SQR3 = 0x00000000;                    //ADC1 选择通道,瞬时电流
读AD程序:
uint16_t    i = 0x0000;
ADC1->SR = 0x0000;ADC1->SQR3 = 0x00000000;ADC1->SQR3 |= ADC_SQR3_SQ1_1;       //ADC1ADC1->SQR3 |= ADC_SQR3_SQ1_3;       //ADC1 第一个转换通道AN10Delay(200);ADC1->CR2 |= ADC_CR2_ADON;          //启动A/D 1转换Delay(200);while((~ADC1->SR)   ADC_SR_EOC){Delay(1);}i = ADC1->DR;
AD时钟频率8MHz
Delay(1) 是延迟加清看门狗
输入是电位器中心抽头,用万用表检测的输入电压



回帖(1)

秦玫

2024-3-12 14:53:51
几点提醒供参考:

1、硬件上 电源尽量稳定,vdd vdda这些脚要接好、接全,不能有漏的。如果没有外接ref参考电压,VDDA乃ADC的基准参考;

2、在不影响整体性能前提下,采样时间尽量给足给够,不要太短;

3、使用ADC前记得做好校准,注意校准前不要启动ADC;

4、你现在是使用寄存器操作,特别注意某些时序要求,启动ADC后给它点启动稳定时间,我们可以通过查询相关标志来确认这点;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分