proteus中进行STM32F103C8T6仿真串口打印小数卡死的解决办法
问题缘由
今天进行STM32F103C8T6串口通信仿真时,尝试在proteus中打印小数数据给上位机,发现程序卡死,如下图
解决办法
在网络上查阅了资料后发现,proteus对小数的打印问题存在bug,这里参考了如下链接
https://www.bilibili.com/video/BV1iE411L7ka/?spm_id_from=333.880.my_history.page.click&vd_source=78bcb842e4d67f6e8c0b6dd51eb92bd6
解决办法不使用如下的串口打印程序
printf("t1 温度%.3f,线性%.3f,灵敏度%.3f\r\n",t,Linear,sensitive);
而是自己手动构造一个串口打印函数,函数传入的形参为浮点数的值。这样,需要在串口打印浮点数时,调用一遍此函数即可。
void PrintFloat(float value)
{
int tmp,tmp1,tmp2,tmp3,tmp4;
tmp=(int)value;
tmp1=abs((int)((value-tmp)*10)%10);
tmp2=abs((int)((value-tmp)*100)%10);
tmp3=abs((int)((value-tmp)*1000)%10);
tmp4=abs((int)((value-tmp)*10000)%10);
printf("%d.%d%d%d%d",tmp,tmp1,tmp2,tmp3,tmp4);
}
这样,就实现了proteus和keil的联合仿真。
改进后的实验结果
proteus仿真正常啦!
上位机打印正常啦!
结语
如果读者有单片机的开发项目的话,可以联系我,博主长期接单片机开发的项目。
如果读者有单片机的开发项目的话,可以联系我,博主长期接单片机开发的项目。
如果读者有单片机的开发项目的话,可以联系我,博主长期接单片机开发的项目。