搜索
查看: 3683|回复: 4

[求助] STM32 HAL库 I2C读写函数使用

[复制链接]

该用户从未签到

9

主题

14

帖子

0

蝴蝶豆

中级会员

最后登录
2021-3-29
发表于 2020-11-19 10:15:36 | 显示全部楼层 |阅读模式
问题如下:使用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)

回复

使用道具 举报

该用户从未签到

27

主题

1912

帖子

42

蝴蝶豆

论坛元老

最后登录
2022-7-11
发表于 2020-11-23 11:54:30 | 显示全部楼层
还是用模拟I2C吧,简单还省事。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

26

主题

1127

帖子

59

蝴蝶豆

论坛元老

最后登录
2021-7-29
发表于 2020-11-23 12:00:03 | 显示全部楼层
使用硬件I2C总觉得有点象隔靴搔痒,软件模拟I2C更直观。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

91

帖子

0

蝴蝶豆

中级会员

最后登录
2021-12-17
发表于 2020-11-24 08:22:48 | 显示全部楼层
~~~~~~~~~~~~~~
回复

使用道具 举报

该用户从未签到

3

主题

1306

帖子

929

蝴蝶豆

版主

最后登录
2021-3-31
发表于 2020-11-30 12:00:23 | 显示全部楼层
能不能用关键看函数的功能是否和设备需要的时序是否匹配。这个函数原本是为了在EEPROM上应用的,当然EEPROM的时序是比较通用的一种。
另外大家说的也有道理,软件模拟I2C可以相对逻辑简单,调试方便,不用详细了解库函数中的细节以及芯片底层驱动原理,只要对照设备的时序就行。缺点就是少了一点兼容性,速度稍慢,占用CPU时间长一点点,而且一般只能做主设备。
硬件I2C的好处是操作速度快,占用CPU时间不多,而且兼容性好,主从都可以。缺点就是用户要了解底层硬件工作原理,库函数的应用方式和范围。
Hal_i2c_mem 说明.PNG
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-27 10:01 , Processed in 0.186134 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表