在线时间21 小时
UID3684645
ST金币56
蝴蝶豆0
注册时间2020-11-18
该用户从未签到
中级会员
- 最后登录
- 2021-3-29
|
问题如下:使用HAL库读写从设备寄存器
从设备地址由两部分组成:Slave ID (0x8E) 和Offset(0x86),均已是写地址,读地址加1即可;
从设备寄存器地址也是两部分组成:如 Slave ID (0x01) 和Offset(0xFF)
向从设备寄存器写入数据的过程为(分两步):
ST > Device address 0x8E/w > ACK > 0x00 > ACK > Slave ID 0x01 > ACK > STOP
ST > Device address 0x86/w > ACK > Offset 0xFF > ACK > Data 0x45 > ACK > STOP
使用两次HAL_I2C_Mem_Write函数是否即可?
uint8_t RegVal = 0x01;
uint8_t Data = 0x45;
HAL_I2C_Mem_Write(&hi2c1, 0x8E, 0x00, I2C_MEMADD_SIZE_8BIT, &RegVal, 1, 1000)
HAL_I2C_Mem_Write(&hi2c1, 0x86, 0x01, I2C_MEMADD_SIZE_8BIT, &Data, 1, 1000)
向从设备寄存器写读取据的过程为(分两步):
ST > Device address 0x8E/w > ACK > 0x00 > ACK > Slave ID 0x01 > ACK > STOP
ST > Device address 0x86/w > ACK > Offset 0xFF > ACK > RST > Device address 0x87/r > ACK > 0xAC > NACK > STOP
使用一次HAL_I2C_Mem_Read函数和一次HAL_I2C_Mem_Write是否即可?
uint8_t RegVal_1 = 0x01;
uint8_t * RegVal_2;
HAL_I2C_Mem_Write(&hi2c1, 0x8E, 0x00, I2C_MEMADD_SIZE_8BIT, &RegVal_1, 1, 1000)
HAL_I2C_Mem_Read(&hi2c1, 0x87, 0xFF, I2C_MEMADD_SIZE_8BIT, RegVal_2, 1, 1000)
|
|