本人最近使用stm32f103rc写了一个检测数据的程序,使用12864OLED屏显示检测到的数值,按理说检测到的数据应该是实时显示的,但是偶尔会出现检测到的数值为最大值状态,改变其他的外界变量数值都不会变化,直到手动复位数值才会重新变化。
while (1)
{
Init_HMC5883(); //初始化
for(i=0;i<6;i++)
{
BUF[i] = Single_Read_HMC5883(i+3);//将寄存器值放到BUF里面
delay_us(500);
}
x = BUF[0];x1 = BUF[1];
y = BUF[4];z1 = BUF[5];
z = BUF[2];y1 = BUF[3];
xyzdisplay(); //x\y\z的oled显示程序
if((BUF[0]!=Xvalue)&(BUF[2]!=Yvalue)&BUF[4]!=Zvalue)// if((BUF[0]<0xfe)&(BUF[2]==0x00)&BUF[4]>0x03)
{
delay_us(500);
BUF[0] = Single_Read_HMC5883(3);
BUF[2] = Single_Read_HMC5883(5);
BUF[4] = Single_Read_HMC5883(7);
if((BUF[0]!=Xvalue)&(BUF[2]!=Yvalue)&BUF[4]!=Zvalue)
{
k=~k;
printf("¾¯¸æ%d\r\n",k); //±¨¾¯Í£³µ00
GPIO_SetBits(LED1_PORT,LED1_PIN);
delay_us(10000);
calibration_mode();
}
else
{
printf("xxxxxxxxxxxxxxxxxx\r\n");
GPIO_ResetBits(LED1_PORT,LED1_PIN);
}
}
else
{
printf("xxxxxxxxxxxxxxxxxx\r\n");
GPIO_ResetBits(LED1_PORT,LED1_PIN);
}
delay_us(50000);
}
}