问题遇到的现象和发生背景
读取距离部分,程序卡在了while(!(VL6180X_ReadByte(VL6180X_REG_RESULT_RANGE_STATUS) & 0x01));循环中
问题相关代码,请勿粘贴截图
//单位毫米
uint8_t VL6180X_Read_Range(void)
{
uint8_t range = 0;
//开启传输
while(!(VL6180X_ReadByte(VL6180X_REG_RESULT_RANGE_STATUS) & 0x01));
VL6180X_WriteByte(VL6180X_REG_SYSRANGE_START,0x01); //单次触发模式
//等待新样本就绪阈值事件(New Sample Ready threshold event)
while(!(VL6180X_ReadByte(VL6180X_REG_RESULT_INTERRUPT_STATUS_GPIO) & 0x04));
range = VL6180X_ReadByte(VL6180X_REG_RESULT_RANGE_VAL);
//获取完数据,清楚中断位
VL6180X_WriteByte(VL6180X_REG_SYSTEM_INTERRUPT_CLEAR,0x07); //0111b 清除了三种中断标志
return range;
}
运行结果及报错内容
编译未报错
我的解答思路和尝试过的方法
将两个while循环注释掉,返回值一直为0xff,因此该办法无效
我想要达到的结果
uint8_t VL6180X_Read_Range(void)函数可以返回有效值