OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3312|回复: 4

内部温度实验的数据类型

[复制链接]

31

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2016-6-5
在线时间
53 小时
发表于 2016-8-29 21:39:30 | 显示全部楼层 |阅读模式
1金钱
short Get_Temprate(void)        //获取内部温度传感器温度值
{
        u32 adcx;
        short result;
        double temperate;
        adcx=T_Get_Adc_Average(ADC_Channel_16,20);        //读取通道16,20次取平均
        temperate=(float)adcx*(3.3/4096);                //电压值
        temperate=(1.43-temperate)/0.0043+25;        //转换为温度值          
        result=temperate*=100;                                        //扩大100倍.
        return result;
}
大神能不能详细解释解释这些用数据类型原因啊?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

305

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2876
金钱
2876
注册时间
2016-7-17
在线时间
404 小时
发表于 2016-8-29 21:56:16 | 显示全部楼层
首先说本人也是新手上路,断不敢被大神称号。
ADC寄存器只能是以32位字访问,所以ADCX为32位,无符号数是由于ADC规则转换无负号可能。
函数返回值为温度值,short应是16位有符号整数,温度计算完应该有符号。
temperate采用双精度浮点数提高运算精度。
(float)为格式转换的作用,将ADCX由整型变为浮点型再参与计算。
有不对的地方请指正。
回复

使用道具 举报

31

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2016-6-5
在线时间
53 小时
 楼主| 发表于 2016-8-29 22:12:03 | 显示全部楼层
f1174562 发表于 2016-8-29 21:56
首先说本人也是新手上路,断不敢被大神称号。
ADC寄存器只能是以32位字访问,所以ADCX为32位,无符号数是 ...

那最后那个result=temperate*=100乘上100,其余的小数位也就是忽略咯?是吗?
回复

使用道具 举报

6

主题

305

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2876
金钱
2876
注册时间
2016-7-17
在线时间
404 小时
发表于 2016-8-30 09:58:33 | 显示全部楼层
浮点型被转化为短整型了,小数点后的被舍去了。
回复

使用道具 举报

6

主题

305

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2876
金钱
2876
注册时间
2016-7-17
在线时间
404 小时
发表于 2016-8-30 10:03:31 | 显示全部楼层
标准答案请看看C语言的数据类型转换章节。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 05:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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