STM32 全局变量赋值,卡死程序

现象

这是一个通过I2C读取LM75A温度的程序,当我在读取完温度,直接printf输出,程序可以正常运行。然而我将读取的温度赋值给全局变量时,却卡死程序。

解决办法

u16 Lm75a_Get(u8 devAddr){
	u8  raw_data[2]={0};
	u16 v=0;
	TempDataStruct my_ir;
	my_ir.Sign  = ' ';
	if(Single_ReadI2C2(devAddr,0x00,raw_data,2))
	{
		my_ir.TempAll = ((raw_data[0] << 8) | raw_data[1]);
		if ((raw_data[0] & 0x80) != 0) //如果D10不等于0,则温度为负
		{
			my_ir.TempAll = ~(my_ir.TempAll) + 1;
			my_ir.Sign = '-';
		}
		//低5位数据无效移除
		my_ir.TempAll >>= 5;
		my_ir.TempAll = my_ir.TempAll * 0.125 * 10 + 0.5;
		//提取各位部分数据
		my_ir.Hun = my_ir.TempAll * 10;//温度乘以100
		v=my_ir.TempAll * 10;
		my_ir.Tens = (my_ir.TempAll / 100) % 10;
		my_ir.Unit = (my_ir.TempAll / 10) % 10;
		my_ir.Decimals = my_ir.TempAll % 10;
	}else{
		my_ir.TempAll =9999;
		v=9999;
	}
	return v;
}

由于代码时拷贝的另一个I2C读取温度的程序,Single_ReadI2C2(devAddr,0x00,raw_data,2)这句代码中,最后一个2表示长度,拷贝过来时,是7。忘了修改了,导致内存紊乱。

改回2就解决了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值