[STM32F1] ADC工作正常,但无法在UART上发送浮点值

[复制链接]
 楼主| WHALEE 发表于 2025-6-10 10:00 | 显示全部楼层 |阅读模式
程序中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);
}


onlycook 发表于 2025-6-10 16:16 | 显示全部楼层
在链接器选项中是否启用了浮点支持。
elephant00 发表于 2025-6-10 16:23 | 显示全部楼层
如果sprintf不可靠,可以手动实现浮点数到字符串的转换。
flycamelaaa 发表于 2025-6-10 17:00 | 显示全部楼层
在IAR或GCC中,检查编译选项是否启用了浮点支持。
powerantone 发表于 2025-6-10 17:56 | 显示全部楼层
缓冲区溢出?
stormwind123 发表于 2025-6-10 19:00 | 显示全部楼层
如果浮点数的值非常小或非常大,可能在格式化时被截断为零。
probedog 发表于 2025-6-10 19:00 | 显示全部楼层
手动转换浮点数。
classroom 发表于 2025-6-10 19:36 | 显示全部楼层
检查UART配置尤其是波特率、数据位、停止位和校验位。
cr315 发表于 2025-6-10 21:00 | 显示全部楼层
用的库是否支持浮点数格式化。
jcky001 发表于 2025-6-10 22:00 | 显示全部楼层
是否是浮点数格式化的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

40

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部