使用cube MX配置好对应的参数后:
unsigned char OLED_ADDRESS=0x78;//OLED地址
I2C_HandleTypeDef hi2c1; //cube MX生成的一个资源句柄
void WriteCmd(unsigned char I2C_Command)//写命令
{
// uint8_t pData[1];
// pData[0] = I2C_Command;
uint8_t *pData;
pData = &I2C_Command;
HAL_I2C_Mem_Write(&hi2c1,OLED_ADDRESS,0x00,I2C_MEMADD_SIZE_8BIT,pData,1,100);
//使用这条子函数写入数据需要把数据放入数组,然后把数组的名字作为参数传递。详细看开发手册
}
void WriteDat(unsigned char I2C_Data)//写数据
{
// uint8_t pData[1];
// pData[0] = I2C_Data;
uint8_t *pData;
pData = &I2C_Data;
HAL_I2C_Mem_Write(&hi2c1,OLED_ADDRESS,0x40,I2C_MEMADD_SIZE_8BIT,pData,1,100);
//同上写入数组
}
i2c读取数据(这个oled并不需要读取数据,不过还是写一下):
uint8_t AD_ReadData(uint16_t Addr, uint8_t Reg)//器件地址 /数据地址
{
HAL_StatusTypeDef status = HAL_OK;
uint8_t value = 0;
status = HAL_I2C_Mem_Read(&hi2c2, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &value, 1, 3000);
/* 检测I2C通信状态 */
if(status != HAL_OK)
{
/* 调用I2C通信错误处理函数 */
}
return value;
}