I2C设备通信示例
下面是与多个I2C设备通信的示例代码:
c
复制代码
#include "stm32f4xx_hal.h" // 根据具体型号修改
I2C_HandleTypeDef hi2c1;
// I2C初始化
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000; // I2C时钟速度
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0; // 主设备地址为0
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c1);
}
// 读I2C设备
HAL_StatusTypeDef I2C_Read(uint8_t device_addr, uint8_t *data, uint16_t size)
{
return HAL_I2C_Master_Receive(&hi2c1, device_addr << 1, data, size, HAL_MAX_DELAY);
}
// 写I2C设备
HAL_StatusTypeDef I2C_Write(uint8_t device_addr, uint8_t *data, uint16_t size)
{
return HAL_I2C_Master_Transmit(&hi2c1, device_addr << 1, data, size, HAL_MAX_DELAY);
}
// 示例:与两个I2C设备通信
void CommunicateWithDevices(void)
{
uint8_t data[10];
// 从设备1读取数据
I2C_Read(0x1A, data, sizeof(data)); // 设备地址0x1A
// 向设备2写入数据
uint8_t write_data[2] = {0x00, 0xFF};
I2C_Write(0x2B, write_data, sizeof(write_data)); // 设备地址0x2B
}
|