I2C函数中HAL_I2C_Mem_Write和HAL_I2C_Master_Transmit有啥区别呀

已邀请:

admin

赞同来自:

同问——

8号青年

赞同来自: 月夜叉-yaksa

一个是写函数,一个是传输函数…………。写函数是只写一个字节。传输就是写多个字节。

xcs101 - 90后

赞同来自:

HAL_I2C_Mem_Write是可以在形参设置要写入的寄存器地址

在我的理解里,mem函数是专门给类似存储器一类的设备用的。

使用HAL_I2C_Mem_Write等于

先使用HAL_I2C_Master_Transmit传输第一个寄存器地址,再用HAL_I2C_Master_Transmit传输写入第一个寄存器的数据。

HAL_I2C_Mem_Write一样可以传输多个数据,有一个参数设置数据大小。

在传输过程,寄存器地址和源数据地址是会自加的。

至于读函数也是如此,因此用HAL_I2C_Mem_Write和HAL_I2C_Mem_Read,来写读指定设备的指定寄存器数据是十分方便的,已在SH1106和BMP280上验证成功,让设计过程省了好多步骤。

不过,效率方面,就还没验证,本人项目暂时对效率无明确要求。

大博哥 - 90后,嵌入式软硬件

赞同来自:

楼主你好,我现在用cubemx生成的hal_i2c_mem_read函数,发设备地址0x6b,寄存器地址0x01。用示波器发现,发设备地址的时候函数把最低位置0了,也就是改为了写的逻辑电平,我把他改回来发出0x6b的波形后,无法产生0x01的波形,请问你产生的波形是什么样子,谢谢!我的邮箱是768839134@qq.com,方便的话是否可以分享一下你成功的代码

要回复问题请先登录注册