STM32_HAL库I2C通信模式操作指令(基于CubeMX软件)

发布于 2024-02-26  40 次阅读


定义设备地址

#define ****_ADDRESS 0x70
//定义设备地址

I2C初始化

void ****_Init(){
//初始化
  uint8_t readBuffer;
//一字节读取readBuffer
  HAL_Delay(40);
//等待40毫秒
  HAL_I2C_Master_Receive(&hi2c1,****_ADRESS,&readBuffer,1,HAL_MAX_DELAY);
//I2C接收一字节
  if ((readBuffer&0x80)==0x00){
//判断I2C接收一字节是否符合
    uint8_t sendBuffer[3]={***,***,***};
    HAL_I2C_Master_Transmit(&hi2c1,****_ADRESS,sendBuffer,3,HAL_MAX_DELAY);
//I2C发送三字节
  }
}

I2C读取程序

void ****_Read(float *Tamperature,float *Humidity){
  uint8_t sendBuffer[3]={***,***,***};
//发送数据
  uint8_t readBuffer[6];
//接收数据
  HAL_I2C_Master_Transmit(&hi2c1,****_ADRESS,sendBuffer,3,HAL_MAX_DELAY);
  HAL_Delay(75);
//等待发送
  HAL_I2C_Master_Receive(&hi2c1,****_ADRESS,&readBuffer,6,HAL_MAX_DELAY);
  if ((readBuffer[0]&0x80)==0x00{
    uint32_t data =0;
    data=((unit32_t)readBuffer[3]>>4+**************;
    *Humidity = data *300*******;
    *Temperature = data**********;
//数据计算
  }
}

主函数设置

****_Init();
//初始化
float temperature,humidity;
//定义变量
char message[50];
//定义发送字符
while(1){
  ****_Read(&temperature,&humidity);
  sprintf(message,"温度:%.lf℃,湿度%.lf %%\r\n",temperature,humidity);
  HAL_UART_Transmit(&huart2<(unit8_t*)message,strlen(message),HAL_MAS_DELAY);
//UART串口发送message
  HAL_Delay(1000);
}