完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、芯片:STM32F103C8T62、环境:STM32CubeIDE3、问题:printf浮点数,浮点数数值丢失如 float A=25.6666;float B=24.7777;实际打印出来:第一种情况:A=2.0000;B=0.0000;第二种情况:A=-2.0000; B=-26815615859885194199148049996411692254958731641184786755447122887443528060147093953603748596333806855380063716372972101707507765623893139892867298012168192.000000偶尔会出现以上情况,除此之外正常打印浮点数。4、已开启STM32CubeIDE打印浮点数,也加了Flag。打印整数不会出现问题尝试double A;double B;也会出现上述问题以下是代码
void HAL_tiM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { double Printf_T_Set,Printf_T_Act; Printf_T_Set = T_Set; Printf_T_Act = T_Act; if(htim->Instance == htim2.Instance) { if(printSoftwareVersion==1){ printSoftwareVersion=0; printf("Software Version: M01_40mA_V03 rn");}if(printEnabled==1){// printf("T-Set:%.4f rn",Printf_T_Set); // printf("T-Act:%.4f rn",Printf_T_Act); printf("T-Set:%lf rn",Printf_T_Set); printf("T-Act:%lf rn",Printf_T_Act);}}} ifdef GNUC define PUTCHAR_PROTOTYPE int __io_putchar(int ch) else define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit( huart1,(uint8_t *) ch,1,0xFFFF);//阻塞方式打印,串口1 return ch; } |
|
相关推荐
1个回答
|
|
在使用STM32CubeIDE进行浮点数打印时,可能会遇到浮点数数值丢失的问题。这种情况可能是由以下几个原因导致的:
1. **浮点数精度问题**:浮点数在计算机中是以二进制形式表示的,这可能导致某些十进制小数无法精确表示。当这些无法精确表示的浮点数被转换为字符串时,可能会出现精度丢失的情况。 2. **缓冲区溢出**:如果printf函数的缓冲区大小不足以容纳要打印的浮点数字符串,可能会导致部分字符被截断,从而丢失数值。 3. **浮点数异常**:在某些情况下,浮点数可能会遇到异常情况,如除以零、溢出或下溢等。这可能导致浮点数的值变为无穷大或NaN(Not a Number),从而导致打印结果异常。 4. **编译器优化**:编译器可能会对代码进行优化,以提高性能。在某些情况下,这种优化可能会导致浮点数的精度降低或丢失。 为了解决这个问题,你可以尝试以下方法: 1. **使用更高精度的浮点类型**:尝试使用`double`类型代替`float`类型,因为`double`类型的精度更高。 2. **调整printf函数的格式化字符串**:确保格式化字符串能够正确地表示浮点数的精度。例如,使用`%f`代替`%lf`,或者使用`%.3f`来限制小数点后的位数。 3. **检查缓冲区大小**:确保printf函数的缓冲区足够大,以容纳要打印的浮点数字符串。 4. **禁用编译器优化**:在某些情况下,禁用编译器优化可能会解决浮点数丢失的问题。你可以尝试在编译器设置中禁用优化选项。 5. **使用第三方库**:如果问题仍然存在,你可以考虑使用第三方库,如`printf`库,来替代STM32CubeIDE自带的printf函数。 6. **检查硬件问题**:确保STM32F103C8T6芯片和相关硬件没有故障,因为硬件问题也可能导致浮点数丢失。 通过尝试以上方法,你应该能够找到导致浮点数丢失的原因,并采取相应的措施来解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1870 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1657 浏览 1 评论
1137 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
757 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1719 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
786浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
609浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
589浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-10 10:48 , Processed in 0.890664 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号
|