STM32 HAL_I2C_Master_Transmit-为什么我们需要转移地址?

问题描述 投票:0回答:1

在绊倒非常奇怪的事情之后,我想找出是否有人可以提供合理的解释。

我有在I2C上运行的SHT31湿度传感器,并且试图在STM32F2上运行后,它无法正常工作。

uint8_t __data[5]={0};

__data[0] = SHT31_SOFTRESET >> 8;
__data[1] = SHT31_SOFTRESET & 0xFF;


HAL_I2C_Master_Transmit(&hi2c3,((uint16_t)0x44)<<1,__data,2,1000);

我已经打开功能并看到:

/**
  * @brief  Transmits in master mode an amount of data in blocking mode.
  * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains
  *                the configuration information for the specified I2C.
  * @param  DevAddress Target device address: The device 7 bits address value
  *         in datasheet must be shifted to the left before calling the interface
  * @param  pData Pointer to data buffer
  * @param  Size Amount of data to be sent
  * @param  Timeout Timeout duration
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
{
  /* Init tickstart for timeout management*/
  uint32_t tickstart = HAL_GetTick();

  if (hi2c->State == HAL_I2C_STATE_READY)
  ....... and it goes ....

因此,我遵循了我的范围内的评论和沮丧(看看为什么我的位子没上线并做了:

HAL_I2C_Master_Transmit(&hi2c3,((uint16_t)0x44)<<1,__data,2,1000);

最后,我的东西消失了,设备使我回击-瞧,它起作用了!

但是为什么?程序员负担转移地址的背后原因是什么?

stm32 i2c
1个回答
0
投票

因为可能应该使程序员知道他是否要向I2C从设备读取数据或从I2C从设备读取数据。

在普通的I2C通信中,“地址字节”的前七个位包含从机地址,而最后一位是读/写位。写入0,读取1

在您的情况下,您想将数据写入设备(以执行软复位),因此简单的向左移位即可解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.