ADC工作正常,但无法在UART上发送浮点值
程序中ADC工作正常,但无法在UART上发送浮点值。只有整数发送正常。但是当我使用sprintf函数发送浮点值时,只能发送零。程序如下uint16_t val;float voltage=0;while{ HAL_Delay(1000); /* USER CODE END WHILE */ HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc, 10);val = HAL_ADC_GetValue(&hadc);
voltage= ((val/4096)*3.3); sprintf(p,"%1.3f ",voltage); /* For floting value displaying*/ HAL_UART_Transmit(&huart2, p, sizeof(p), 10); HAL_ADC_Stop(&hadc);}
while{HAL_Delay(1000); /* USER CODE END WHILE */ HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc, 10); val = HAL_ADC_GetValue(&hadc);sprintf(p, "%d ", val);HAL_UART_Transmit(&huart2, p, sizeof(p), 10); HAL_ADC_Stop(&hadc);}
在链接器选项中是否启用了浮点支持。 如果sprintf不可靠,可以手动实现浮点数到字符串的转换。 在IAR或GCC中,检查编译选项是否启用了浮点支持。 缓冲区溢出? 如果浮点数的值非常小或非常大,可能在格式化时被截断为零。 手动转换浮点数。 检查UART配置尤其是波特率、数据位、停止位和校验位。 用的库是否支持浮点数格式化。 是否是浮点数格式化的问题。
页:
[1]