proteus中进行STM32F103C8T6仿真串口发送小数卡死的解决办法

proteus中进行STM32F103C8T6仿真串口打印小数卡死的解决办法

问题缘由

今天进行STM32F103C8T6串口通信仿真时,尝试在proteus中打印小数数据给上位机,发现程序卡死,如下图
LCD显示卡死
串口输出卡死
串口打印程序

解决办法

在网络上查阅了资料后发现,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仿真正常啦!
proteus仿真正常
上位机打印正常啦!
上位机打印正常啦

结语

如果读者有单片机的开发项目的话,可以联系我,博主长期接单片机开发的项目。
如果读者有单片机的开发项目的话,可以联系我,博主长期接单片机开发的项目。
如果读者有单片机的开发项目的话,可以联系我,博主长期接单片机开发的项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值