功能:在阻塞模式下将大量数据写入特定的内存地址
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;
}
上面调用I2C_RequestMemoryWrite(),先发送从机地址和寄存器地址
下面用while循环把需要写入寄存器的数据全部发送出去。
另一个写函数(HAL_I2C_Master_Transmit()
与上一个函数的区别是,这里只发送器件地址,没有寄存器地址
至于SR1的TXE与BTF位有什么区别,目前还搞得不是很清楚
写器件地址和寄存器地址
static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout)
只写器件地址