你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F1HAL,printf固定浮点数,出现丢数值

[复制链接]
Elsa_Li 提问时间:2024-5-31 15:36 / 未解决

芯片:STM32F103C8T6 环境:STM32CubeMX和STM32CubeIDE 库:STM32F1HAL 问题:UART1 printf打印浮点数,偶尔出现数据丢失,其他时间正常打印 固定实数,局部变量float A=25.6666;float B=24.7777; 使用调试器来逐步执行代码,调用printf之前和之后的变量值都是A=25.6666; B=24.7777; 实际打印出来: 第一种情况:A=2.0000;B=0.0000; 第二种情况:A=-2.0000; B=-26815615859885194199148049996411692254958731641184786755447122887443528060147093953603748596333806855380063716372972101707507765623893139892867298012168192.000000 偶尔会出现以上情况,除此之外正常打印浮点数。 以下是重定向printf的代码

UART_HandleTypeDef UartHandle;

ifdef GNUC

/* With GCC, small printf (option LD Linker->Libraries->Small printf

set to 'Yes') calls __io_putchar() */

define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

else

define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

endif / GNUC /

PUTCHAR_PROTOTYPE

{

/ Place your implementation of fputc here /

/ e.g. write a character to the USART1 and Loop until the end of transmission /

HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

return ch;

}

收藏 评论2 发布时间:2024-5-31 15:36

举报

2个回答
废鱼 回答时间:2024-5-31 20:58:34

这个我感觉是因为中断中打印时间太长,导致定时器多次中断产生导致。或者是产生了错误,一直再进中断导致的。

Elsa_Li 回答时间:2024-6-3 09:43:17

废鱼 发表于 2024-5-31 20:58
这个我感觉是因为中断中打印时间太长,导致定时器多次中断产生导致。或者是产生了错误,一直再进中断导 ...

[md]我加了定时器,五秒进入打印一次,一次就打印两个值,也是这个情况。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版