一、STM32_CubeMX配置

/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}
/* I2C4 init function */
void MX_I2C4_Init(void)
{hi2c4.Instance = I2C4;hi2c4.Init.Timing = 0x20A0C4DF;hi2c4.Init.OwnAddress1 = 0;hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_ENABLE;hi2c4.Init.OwnAddress2 = 0;hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c4) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK){Error_Handler();}}void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(i2cHandle->Instance==I2C3){/* USER CODE BEGIN I2C3_MspInit 0 *//* USER CODE END I2C3_MspInit 0 */__HAL_RCC_GPIOC_CLK_ENABLE();/**I2C3 GPIO ConfigurationPC8     ------> I2C3_SCLPC9     ------> I2C3_SDA*/GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF8_I2C3;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);/* I2C3 clock enable */__HAL_RCC_I2C3_CLK_ENABLE();/* USER CODE BEGIN I2C3_MspInit 1 *//* USER CODE END I2C3_MspInit 1 */}else if(i2cHandle->Instance==I2C4){/* USER CODE BEGIN I2C4_MspInit 0 *//* USER CODE END I2C4_MspInit 0 */__HAL_RCC_GPIOC_CLK_ENABLE();/**I2C4 GPIO ConfigurationPC6     ------> I2C4_SCLPC7     ------> I2C4_SDA*/GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF8_I2C4;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);/* I2C4 clock enable */__HAL_RCC_I2C4_CLK_ENABLE();/* USER CODE BEGIN I2C4_MspInit 1 *//* USER CODE END I2C4_MspInit 1 */}
}

、测试源码

#define SHTC3_ADDR                   (0x70)
#define SHTC3_CMD_DEV_WRITE         (0xE0)      //(SHTC3_ADDR<<1)
#define SHTC3_CMD_DEV_READ          (0xE1)      //((SHTC3_ADDR<<1)|0x01)
#define SHTC3_CMD_SOFT_RESET        0x805D      //软件复位命令
#define SHTC3_CMD_READ_ID           0xEFC8      //读取SHTC3 ID命令
#define SHTC3_CMD_WAKEUP            0x3517
#define SHTC3_CMD_READ_HUM_DATA     0x5c24
#define SHTC3_CMD_READ_TEMP_DATA    0x7866
#define SHTC3_CMD_READ_SLEEP        0xB098
typedef struct
{uint8_t HumidityMSB;uint8_t HumidityLSB;uint8_t HumidityCRC;uint8_t temperatureMSB;uint8_t temperatureLSB;uint8_t temperatureCRC;
}Sthc3MeasureData;uint8_t Sthc3WriteByte(uint16_t Cmd)
{uint8_t WriteCmd[2];WriteCmd[0] = (uint8_t)(Cmd>>8);WriteCmd[1] = (uint8_t)(Cmd);if(HAL_I2C_Master_Transmit(&hi2c4, (uint16_t)SHTC3_CMD_DEV_WRITE , (uint8_t*)&WriteCmd, sizeof(WriteCmd), 1000) != HAL_OK){Error_Handler();printf("err (L=%d)\n", __LINE__);}while (HAL_I2C_GetState(&hi2c4) != HAL_I2C_STATE_READY);return 0;
}uint16_t Sthc3ReadWord(uint16_t Cmd)
{uint8_t WriteCmd[2];uint16_t ReadData;WriteCmd[0] = (uint8_t)(Cmd>>8);WriteCmd[1] = (uint8_t)(Cmd);if(HAL_I2C_Master_Transmit(&hi2c4, (uint16_t)SHTC3_CMD_DEV_WRITE , (uint8_t*)WriteCmd,  sizeof(WriteCmd), 1000) != HAL_OK) {Error_Handler();}while (HAL_I2C_GetState(&hi2c4) != HAL_I2C_STATE_READY);if(HAL_I2C_Master_Receive(&hi2c4, SHTC3_CMD_DEV_READ , (uint8_t*)&ReadData, 2, 1000) != HAL_OK) //接收word数据{Error_Handler();}return ReadData;
}void Sthc3ReadHumiAndTemp(void)
{uint8_t WriteCmd[2];float hum,temp;Sthc3MeasureData Sthc3Data = {0};uint8_t HumValue, TempValue;WriteCmd[0] = (uint8_t)(SHTC3_CMD_READ_HUM_DATA>>8);WriteCmd[1] = (uint8_t)(SHTC3_CMD_READ_HUM_DATA);if(HAL_I2C_Master_Transmit(&hi2c4, SHTC3_CMD_DEV_WRITE , (uint8_t*)WriteCmd,  sizeof(WriteCmd), 1000) != HAL_OK) {Error_Handler();}HAL_I2C_Master_Receive(&hi2c4, SHTC3_CMD_DEV_READ, (uint8_t *)&Sthc3Data, sizeof(Sthc3Data), 1000);hum = (Sthc3Data.HumidityMSB << 8)|(Sthc3Data.HumidityLSB);temp = (Sthc3Data.temperatureMSB << 8 )|Sthc3Data.temperatureLSB;HumValue = (uint8_t)(100*((float)hum/65535));              //湿度TempValue = (uint8_t)((175*((float)temp/65535)) - 45);     //温度printf("\nH:%d, T=%d\n", HumValue, TempValue);
}void Sthc3SensorI2cReadTask(void *argument)
{uint16_t DevID = 0;uint16_t ReadData = 0;Sthc3WriteByte(SHTC3_CMD_WAKEUP);HAL_Delay(1000);ReadData = Sthc3ReadWord(SHTC3_CMD_READ_ID);DevID = (ReadData<<8)|ReadData>>8;printf("\n(0x%04x)ID=0x%04x\n", DevID, DevID&0x083F);for(;;){Sthc3ReadHumiAndTemp();vTaskDelay(1000/portTICK_RATE_MS);  }
}

逻辑分析仪抓取波形:

​​​​​​​

结论:

1、接上从机传感器之后,CLK,  SDA电平被拉低。查看发现调试板子上拉硬件为10K,于是改为4.7K,拉低问题同样存在。重新换了从机电平信号正常,但数据结尾是NAK。

2、再查看PCB图,发现硬件CLK,SDA两个pin脚顺序错误,交换后读取设备ID正常。

3、源码参考如下:

xiaoshubaoVIP/STM32G473_Code: STM32G473测试code (github.com)

STM32开发记录三: 硬件IIC调试(STHC3温湿度传感器)相关推荐

  1. STM32F103使用硬件IIC驱动SHT30温湿度传感器

    文章目录 前言 一.SHT30温湿度传感器原理图 二.代码部分 1.SHT30.c文件 2.SHT30.h文件 总结 前言 SHT30是一种常见的温湿度传感器,该传感器广泛应用于各种场景,小米的温湿度 ...

  2. stm32hal库应用笔记之硬件IIC读写SHTC31000温湿度传感器

    话不多说上图: 完成的数据手册百度吧 嘻嘻 这是SHTC31000芯片的时序图: 这个怎么看我就不多解释了哈 SHTC3.h #ifndef SHTC3_SHTC3_H_ #define SHTC3_ ...

  3. STM32单片机硬件I2C读取AHT10温湿度传感器数据

    STM32使用硬件IIC读取AHT10温湿度传感器的数据并显示在0.96寸OLED屏上. 我用的单片机是STM32F103C8T6,程序用的是ST标准库写的. STM32使用硬件I2C读取SHTC3温 ...

  4. 基于IIC总线的温湿度传感器,你用过吗

    大家好,我是程序员小哈. 又到了知识分享时间,今天我给大家分享一个温湿度传感器模块,我们之前分享过DHT11和DHT21两款温湿度传感器,它俩是基于单总线输出信号的传感器模块,只需要一个GPIO即可实 ...

  5. 基于I2C硬件协议的AH20温湿度传感器的数据采集

    目录 I2C 温湿度传感器数据采集 实验准备 实验步骤: 实验结果: I2C I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实 ...

  6. FPGA实验记录五:I2C读取AHT10温湿度传感器

    FPGA实验记录五:I2C读取AHT10温湿度传感器 一.AHT10温湿度传感器 1. 简介 AHT10,新一代温湿度传感器在尺寸与智能方面建立了新的标准:它嵌入了始于回流焊的双列扁平无引脚SMD封装 ...

  7. 【正点原子STM32连载】第四十章 DHT11数字温湿度传感器 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  8. 模拟IIC读取SHT30温湿度传感器数据

    文章目录 1 i2c.c 2 i2c.h 3 crc.c 4 crc.h 1 i2c.c /*** @brief SHT30温湿度传感器相关,使用模拟IIC进行数据的读取*/#include < ...

  9. SHT11(IIC协议的温湿度传感器)简介和编程方法

    SHT11是瑞士Scnsirion公司推出的一款数字温湿度传感器芯片.该芯片广泛应用于暖通空调.汽车.消费电子.自动控制等领域.共主要特点如下: ◆高度集成,将温度感测.湿度感测.信号变换.A/D转换 ...

最新文章

  1. j.u.c.locks.AbstractQueuedSynchronizer.Node
  2. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 8. 软间隔与支持向量回归
  3. 伸缩门遥控器c语言程序,急求求c++编程高手,求50的阶乘,要求结果是精确的整数,打印在屏幕上。...
  4. 目标检测--A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection
  5. 一个n位的数,去掉其中的k位,问怎样去使得留下来的(n-k)位数按原来的前后顺序组成的数最小...
  6. vue 实践技巧合集
  7. SpringMVC(二八) 重定向
  8. 朋友,别告诉我你懂分布式事务!
  9. 算法 --- 递归生成括号
  10. 学习select(函数)
  11. C++ 中重载 + 操作符的正确方法
  12. 国家哀悼日将网站全部变成灰色的代码
  13. Python基础学习:svn导出差异文件脚本
  14. 昔日的 HTC 与三星,今日的苹果:寒冬过后手机厂商才会明白的潜规则
  15. React Native 系列(三) -- 项目结构介绍
  16. cad2020打印样式放在哪个文件夹_打印机故障:打印一直出现乱码,什么原因?...
  17. 面向价值实现的数据资产管理体系构建
  18. 基于MDKA5D31-EK_T70开发板的QT示例-demo04:LM75A温度监测
  19. java script是什么_Java Script的工作原理是什么?怎样用它来生成简单的
  20. 企业劳务派遣的人员怎么界定身份

热门文章

  1. JavaScript箭头函数用法
  2. 结构化机器学习项目(二)- 机器学习策略(2)
  3. Android 证书安装流程分析
  4. 考拉 css,LESS/Sass 编译工具Koala介绍
  5. linux php和java环境变量配置_Linux设置PHP环境变量
  6. 中兴交换机怎么查看服务器,中兴交换机查看端口状态命令
  7. latex 中特殊符号:字母中央有斜杠
  8. python one hot编码_One-Hot编码详解与Python实现
  9. Linux进入单用户模式
  10. AngularJS 学习笔记---AngularJS 表达式