野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9821|回复: 5

请教各位:F103RB,ADC1读取的转换值正常,转换成电压却一直为0?

[复制链接]
发表于 2018-5-19 15:23:22 | 显示全部楼层 |阅读模式
今天用ADC1的IN10通过NTC测温度,如下:开始用的函数如下:
ADC_ConvVolatge是:__IO uint16_t ADC_ConvVolatge;类型

static void ADC_GetConvVolatge1(void)
{
         ADC_ConValue = ADC_GetValue();//读取ADC1的转换值  ADC_ConValue数值正常
         ADC_ConvVolatge  = (ADC_ConValue/4096)*3300;//但是这句ADC_ConvVolatge的值一直为0,不知何故?
}



后来改成的函数如下:
ADC_ConvVolatge是__IO float ADC_ConvVolatge;类型
static void ADC_GetConvVolatge2(void)
{
         ADC_ConValue = ADC_GetValue();//读取ADC1的转换值 正常
         ADC_ConvVolatge  = (float)ADC_ConValue/4096*3.3;
         ADC_ConvVolatge = (uint16_t)(ADC_ConvVolatge*1000);//ADC_ConvVolatge 数值正常
}

请教大家,到底是哪里的问题呢?虽然问题用函数2可以解决,但是函数1不知道问题出在哪里了?
回复

使用道具 举报

发表于 2018-5-19 15:47:42 | 显示全部楼层
第一个代码中ADC_ConValue是整型数据,而且ADC_ConValue肯定小于4096,所以ADC_ConValue/4096 = 0

第二个代码中转换成浮点数类型,计算结果不会被舍去,所以正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-19 16:09:28 | 显示全部楼层
flyleaf 发表于 2018-5-19 15:47
第一个代码中ADC_ConValue是整型数据,而且ADC_ConValue肯定小于4096,所以ADC_ConValue/4096 = 0

第二 ...

多谢,多谢!每次都是你最积极回答网友的问题!赞你!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-19 16:12:16 | 显示全部楼层
flyleaf 发表于 2018-5-19 15:47
第一个代码中ADC_ConValue是整型数据,而且ADC_ConValue肯定小于4096,所以ADC_ConValue/4096 = 0

第二 ...

ADC_ConvVolatge  = (ADC_ConValue/4096)*3300;应改成:
ADC_ConvVolatge  = ADC_ConValue*3300/4096:应该可以吧,等会试下看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-19 16:14:02 | 显示全部楼层
ADC_ConvVolatge  = (ADC_ConValue/4096)*3300;//但是这句ADC_ConvVolatge的值一直为0,不知何故?
这句应该改成:
ADC_ConvVolatge  = ADC_ConValue*3300/4096;//这样应该没问题,等下试下看
回复 支持 反对

使用道具 举报

发表于 2018-5-19 16:43:37 | 显示全部楼层
RAYINGPX 发表于 2018-5-19 16:12
ADC_ConvVolatge  = (ADC_ConValue/4096)*3300;应改成:
ADC_ConvVolatge  = ADC_ConValue*3300/4096 ...

一样,都必须为浮点类型,不然都是会舍弃小数部分
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-19 04:05 , Processed in 0.051403 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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