https://blog.csdn.net/weixin_44479800/article/details/104125346 STM32F103ZET6程序向STM32F103C8T6移植
https://blog.csdn.net/chen1658137632/article/details/105759763 虚拟com口
【吃透系列】STM32CubeMX使用之I2C通讯 https://www.bilibili.com/video/BV14i4y1s7BS?from=search&seid=12894291567517195161
A:读取数据
根据以上的经验以及分析,可以看到整个的代码如下操作
HAL_I2C_Mem_Read 内部参数代表的意义如下 &hi2c1--------------------------------使用的第几个IIC ADDR_BQ25892_Write----------器件的七位地址左移得到 1----------------------------------------器件内部第一个地址开始读 I2C_MEMADD_SIZE_8BIT------读取的数据大小8bit I2C_Buffer_Read-------------------读取到的数据 2-----------------------------------------连续读取多少位 50---------------------------------------50的时间以内,没有读取到则报错
//STM32 HAL 程序Read代码 HAL_I2C_Mem_Read(&hi2c1, ADDR_BQ25892_Write,1,I2C_MEMADD_SIZE_8BIT,I2C_Buffer_Read,2,50); //STM32 HAL 程序读子函数 void IIC_writeReg(uint8_t reg_add, uint8_t reg_dat) { uint8_t sendbuf[2]; sendbuf[0] = reg_add; sendbuf[1] = reg_dat; HAL_I2C_Master_Transmit(&hi2c1 , ADDR_BQ25892_Write, sendbuf ,2 ,10); }在main函数中使用函数
//在01的位置上写入函数01 //地址在子函数中已经添加 IIC_writeReg(0x01,0x01);拓展 1.写的时候,把8bit,中的固定位写,不全部写其内部信息
实现方式: 1.读出之前的数据, 2.在读出的数据上,增加需要更改的数据 3.将计算完的数据写回IIC的寄存器。
在main函数中添加
//Vbat_V 就是ADC读取到的值 Vbat_V = ADC_Get_Average(4,4); //得到电压,不准确 Vbus_V = ADC_Get_Average(3,4); //得到电压