ncvrpeter 发表于 2020-11-19 10:15:36

STM32 HAL库 I2C读写函数使用

问题如下:使用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)

ts2000 发表于 2020-11-23 11:54:30

还是用模拟I2C吧,简单还省事。。。。:D:D:D

hujjj 发表于 2020-11-23 12:00:03

使用硬件I2C总觉得有点象隔靴搔痒,软件模拟I2C更直观。

pig41 发表于 2020-11-24 08:22:48

~~~~~~~~~~~~~~
页: [1]
查看完整版本: STM32 HAL库 I2C读写函数使用