STM32 HAL I2C库读指定寄存器的数据

Support for "repeated start" in STM32 HAL I2C library

Q:
I am working with a slave I2C device (Kionix KX022 acccelerometer)  which uses a "repeated start" mechanism to send data requested by the master (STM32F405), e.g. to read two bytes of data (from register N and register N+1) the following sequence

Master                   Slave
---------------------    ------------------------
START
Slave Address + Write
                         ACK
N (starting register)
                         ACK
START (repeat)
Slave Address + Read
                         ACK
                         Data
ACK
                         Data
NACK
STOP


It appears the STM32F4xx HAL I2C library does not support this directly, since HAL_I2C_Master_Transmit() sends STOP after the data.

I just want to confirm this before writing some code (i.e. gluing together the HAL_I2C_Master_Transmit() and HAL_I2C_Master_Recieve() functions and removing the intervening STOP).

Thanks in advance,
Mike


A:

Hi Mike,

Regarding your needs, it seems that your I2C slave device have a comportment like a EEPROM memory. For this prefer to use HAL_I2C_Mem_Write or HAL_I2C_Mem_Read interface.

To give you more explanation about functionality of this interface :
1- First step of this interface is to send this sequence => START + Slave addr + R/W bit + ACK + Regvalue to write or read + ACK
2- Second step of this interface is to send this sequence => Repeated Start + Slave addr + R/W bit + ACK + DataValue to write or read on RegValue + ACK ….+ STOP

Hope that help,

Best regards,
Heisenberg.

注:
HAL_I2C_Mem_Read和HAL_I2C_Mem_Write 操作真的很方便。

应用如:
SD3088 读数据方法 1 示例(7H~9H 地址读取数据):


模拟读写I2C,再见。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: STM32 HAL I2C是一种用于STM32微控制器的集合,用于实现I2C总线通信协议。该集成了STM32微控制器所有的I2C控制器寄存器,提供了更为简单易用的API接口,方便开发人员进行I2C总线通信开发。 STM32 HAL I2C的主要特点包括以下几点: 1. 支持多种I2C模式:包括标准模式(100Kbps)、快速模式(400Kbps)和高速模式(1Mbps)等。 2. 支持多个I2C从机设备:可以连接多个从机设备,并分别进行写操作。 3. 提供了简单易懂的API接口:开发人员可以使用简单的函数调用实现I2C总线设备的初始化、写操作等。 4. 提供了中断和DMA两种数据传输方式:可以根据实际应用场景选择适合的数据传输方式。 5. 支持主机和从机模式切换:可以在运行过程中切换主机和从机模式。 总之,STM32 HAL I2C是一种非常实用的工具,可以帮助开发人员快速方便地进行STM32微控制器的I2C总线通信开发。无论是在工业自动化、智能家居、医疗设备等领域,都有着广泛的应用。 ### 回答2: STM32 HAL I2C是为STM32微控制器设计的一个硬件抽象层,可以方便地实现I2C总线的写操作。I2C(Inter-Integrated Circuit)总线是一种串行通信总线,常用于连接微控制器、传感器、模拟转换器等设备。在使用I2C通信时,我们需要设置一些参数,如设备地址、传输模式、传输速率等。STM32 HAL I2C封装了这些设置,在使用前,只需要初始化相关参数即可。 在STM32 HAL I2C中,我们可以使用一些常用的函数,如I2C_Init()、I2C_Mem_Write()、I2C_Mem_Read()等。其中,I2C_Init()函数用于初始化I2C总线,设置传输模式、速率等参数;I2C_Mem_Write()和I2C_Mem_Read()函数用于在指定的设备地址下,指定寄存器。 此外,STM32 HAL I2C还提供了一些高级函数,如I2C_Master_Transmit()、I2C_Master_Receive()、I2C_Slave_Transmit()、I2C_Slave_Receive()等,可以方便地实现主从模式的通信。 总之,STM32 HAL I2C提供了方便快捷的API接口,简化了I2C总线操作过程,使得开发者可以更加专注于应用程序的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值