HAL_I2C_Mem_Write()函数位于stm32fxx_hal_i2c.c文件的2432行,源代码对该函数的解释如下图 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 ); 该函数是通过阻塞...
else{/* 该页写不完 *///先将该页写完cnt+=8-addr%8;HAL_I2C_Mem_Write(&hi2c1,AT24C02_ADDR_WRITE,addr,I2C_MEMADD_SIZE_8BIT,dat,cnt,0xFFFF);addr+=cnt;//循环写整页数据for(i=0;i<(size-cnt)/8;i++){HAL_I2C_Mem_Write(&hi2c1,AT24C02_ADDR_WRITE,addr,I2C_MEMADD_SIZE_8BIT,&da...
Hi, I am working on a project using the STM32H730 with the M24C64 I2C EEPROM chip. In my project I am using the HAL_I2C_Mem_Write functions to load
先使用HAL_I2C_Master_Transmit传输第一个寄存器地址,再用HAL_I2C_Master_Transmit传输写入第一个寄存器的数据。 HAL_I2C_Mem_Write一样可以传输多个数据,有一个参数设置数据大小。 在传输过程,寄存器地址和源数据地址是会自加的。 至于读函数也是如此,因此用HAL_I2C_Mem_Write和HAL_I2C_Mem_Read,来写读指定设备...
首先在at24c02_i2c_drv.h中编写AT24C02相关的宏定义: 代码语言:javascript 复制 #defineAT24C02_ADDR_WRITE0xA0#defineAT24C02_ADDR_READ0xA1 然后在at24c02_i2c_drv.c中引入i2c.h,基于HAL提供的硬件IIC操作函数,编写AT24C02的一些底层函数,如下。 任意地址写一个字节 ...
return HAL_I2C_Mem_Write(&hi2c1, AT24C02_ADDR_WRITE, addr, I2C_MEMADD_SIZE_8BIT, dat, 1, 0xFFFF); } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 任意地址读一个字节 根据AT24C02的数据手册可知,AT24C02读一个字节的格式如下: 编写的函数如下: ...
I2CWriteBuffer()是自定义的任意字节写入I2C-AT24C02的函数,I2CReadBuffer()是任意字节读写函数。这两个函数的实现采用HAL库的这两个函数: 1)HALStatusTypeDef HALI2CMemWrite(I2CHandleTypeDef *hi2c, uint16t DevAddress, uint16t MemAddress, uint16t MemAddSize, uint8t *pData, uint16t Size, uint32_t...
EEPROM的I2C地址通常在数据手册中有详细说明,例如AT24C02的写地址为0xA0,读地址为0xA1。 3. 编写STM32向EEPROM写入数据的函数 使用HAL库提供的函数向EEPROM写入数据。 c HAL_StatusTypeDef EEPROM_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pData, uint16_t Size) { return HAL_I2C_Mem...
第三十一章 I2C光照&接近传感器实验 I2C 是最常用的通信接口,众多的传感器都会提供 I2C 接口来和主控相连,比如陀螺仪、 加速度计、触摸屏等等,所以 I2C 是做嵌入式开发必须掌握的,STM32MP157 有 46个 I2C 接口,可以通过这 6 个 I2C 接口来连接一些 I2C 外设。正点原子的STM32MP157开发板使用 I2C5接口连接了...
error = HAL_I2C_Mem_Write(&hi2c1,ADDR_WR_AT24CXX,0x00,I2C_MEMADD_SIZE_16BIT,Wr_buff,length,1000); if(error == HAL_OK) printf("eeprom write done!rn"); else printf("eeprom write fail!rn"); HAL_Delay(1000); //从地址0x00开始读8Byte数据,并打印。