我尝试了 HAL_I2C_Master_Transmit、HAL_I2C_Master_Receive、HAL_I2C_Mem_Write、HAL_I2C_Mem_Read 甚至 DMA 函数,但都没有用——第 8 位始终为 0,ACK 始终为 1。
由于我正在尝试读取地址为 0x68 的设备上寄存器 0x00 的 WHO_AM_I 值,因此我希望在开始时进行写操作,写入内部寄存器地址的值。
这是我的函数,printf 应该打印 0xEA。
void I2C_readReg(uint16_t Slave_ADRS, uint8_t Reg_ADRS, uint16_t Size, uint8_t *pBufferRead)
{
uint8_t pBufferWrite[1];
uint16_t MovedAdrs = (uint16_t)(Slave_ADRS<<1);
HAL_I2C_Mem_Read(&hi2c1, MovedAdrs, (uint16_t)Reg_ADRS, (uint16_t)1, pBufferRead, (uint16_t)Size, (uint32_t)I2C_READ_tiMEOUT);
printf("val 读取 %x
", pBufferRead[0]);
}
Slave_ADRS=0x68和
Reg_ADRS=0x00在哪里