打印
[STM32F1]

stm32F103CB AD采样输入到57mV才读出00000001

[复制链接]
465|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
豌豆爹|  楼主 | 2023-10-23 09:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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; //使用DMA ADC1->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; //ADC1 ADC1->SQR3 |= ADC_SQR3_SQ1_3; //ADC1 第一个转换通道AN10 Delay(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) 是延迟加清看门狗

输入是电位器中心抽头,用万用表检测的输入电压

使用特权

评论回复
沙发
香水城| | 2023-10-23 13:35 | 只看该作者
本帖最后由 香水城 于 2023-10-23 13:44 编辑

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

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

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

4、你现在是基于寄存器的操作,动作很快。不过要注意启动ADC后要稍微延时一段时间待其稳定,可以查询相关标志位来确定,这点别忽视了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

513

主题

1960

帖子

5

粉丝