HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit

功能:在阻塞模式下将大量数据写入特定的内存地址

HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

参数:
1、I2C指针,即用I2C1 还是 I2C2…
2、器件地址uint16_t DevAddress
3、要写入的内存地址 uint16_t MemAddress
4、内存地址类型,是一个地址存8bit ,还是16bit数据 , uint16_t MemAddSize
5、要写入的数组指针uint8_t *pData
6、数据 大小
7、多少时间没完成定义为超时

函数的结构:

  if(hi2c->State == HAL_I2C_STATE_READY) //如果I2C是 ready
  {
  		执行写操作
  }
  else
  {
    return HAL_BUSY;
  }

HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第1张图片
上面调用I2C_RequestMemoryWrite(),先发送从机地址和寄存器地址

下面用while循环把需要写入寄存器的数据全部发送出去。
HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第2张图片
HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第3张图片


另一个写函数(HAL_I2C_Master_Transmit()

HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第4张图片
与上一个函数的区别是,这里只发送器件地址,没有寄存器地址

HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第5张图片
HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第6张图片
至于SR1的TXE与BTF位有什么区别,目前还搞得不是很清楚


写器件地址和寄存器地址

static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout)

HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第7张图片
HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第8张图片


只写器件地址

HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第9张图片
HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit_第10张图片

  
 

你可能感兴趣的:(STM32)