- 本文使用STM32F103RCT6硬件平台,通过32硬件I2C与BQ通信
- 一、I2C外设初始化
- 1、IO设置
void HAL_I2C2_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();
/**I2C2 GPIO Configuration
PB10 ------> I2C2_SCL
PB11 ------> I2C2_SDA
*/
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
- 2、II2C外设初始化
初始化I2C2,主要设置:I2C编号,频率,地址,地址位数,和模式设置等参数
void IIC_Init(void)
{
__HAL_RCC_I2C2_CLK_ENABLE();
HAL_I2C2_GPIO_Init();
hi2c2.Instance = I2C2;
hi2c2.Init.ClockSpeed = 400000;
hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c2.Init.OwnAddress1 = 0;
hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c2.Init.OwnAddress2 = 0;
hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c2) != HAL_OK)
{
Error_Handler();
}
HAL_I2C2_GPIO_Init();
}
- 3、读写函数
BQ不仅又设备地址还有寄存器地址,所以我们使用HAL_I2C_Mem_Read()与HAL_I2C_Mem_Write()这两个函数。
HAL_I2C_Mem_Read(&hi2c1, DEV_