STM32L4xx浮点数表示法

时间:2019-06-25 09:53:04

标签: c++ stm32

众所周知,floatdouble并不总是准确的,但是通常会达到小数位。在我的应用中,该数字不在任何可用结果的范围内

此函数从数组中接收uint32_t

volatile uin32_t adc3 =  hw_ADC_Get(position)

由于这是一个整数,并且输出应以伏特为单位,因此必须将其转换为浮点值。这是通过以下方式完成的:

// divide reference by range, 3000mV/4096bit
float c_factor = float(3000)/4096.0;
// multiply the measured range number by the factor to get the voltage
float v_in = c_factor * float(adc3); 
//multiply voltage with voltage divider ratio, to get real voltage
float v_real = 1.823529179354124 * v_in;

调试结果证明如下

adc3 = 2767
c_factor = 0.737281859
v_in = 540095319  (should be 2040.05)
v_real = 944263180 ( should be 984’879’573.82 inherited from v_in error)

因此,两个浮点操作似乎都失败了,首先是v_in,然后是v_real。

所描述的问题发生在STM32L4xx系列微控制器上。

此行为的可能原因/解决方案是什么?

0 个答案:

没有答案