使用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;
}
最后修改:2020 年 06 月 28 日
声明:无闻风博客|版权所有,违者必究|如未注明,均为原创| 转载:转载请注明原文链接