I2C总线经常用,但是总是搞不清厂家给的地址到底是左移了一位的还是没有左移的,如果能找出在该总线上所有的设备和他们的地址就不用因为这个而苦恼了。
/*
* 显示总线上的所有设备的地址到OLED屏幕上(未左移)
* */
void Find_I2C_Device()
{
for (uint8_t addr = 0x08; addr <= 0x77; addr++)
{
// 将7位地址左移1位,转换为HAL库所需的格式(写模式)
HAL_StatusTypeDef status = HAL_I2C_IsDeviceReady(&hi2c1, addr << 1, 3, 10);
if (status == HAL_OK)
{
char buffer[50];
sprintf(buffer, "Found On:0x%x", addr);
OLED_showString(0,0,buffer,8);
}
HAL_Delay(20); // 短延时避免总线冲突
}
}