stm32 硬I2C AHT10 驱动

### 驱动步骤

1.首先发送AHT10的驱动指令   char INIT_CMD[3] = { 0xE1, 0x08, 0x00 };

2.发送测量指令  uint8_t START_MEASUREMENT_CMD[3] = { 0xAC, 0x33, 0x00 };

3.使用HAL_I2C_Master_Receive 读取寄存器 HAL_I2C_Master_Receive(&hi2c1, AHT10_ADRESS, rawBuff, 6, 0xff);

在stm32中 使用 HAL_I2C_Master_Transmit(&hi2c1, AHT10_ADRESS, INIT_CMD, 3, 0xffff); 发送

参数直接为设备地址      指令数组   数组大小即可 

在stm32中 使用 HAL_I2C_Master_Receive(&hi2c1, AHT10_ADRESS, rawBuff, 6, 0xff); 接受

参数直接为设备地址    接收的数组  接收的数组大小 即可 就是这么简单

int main(void) {
	/* USER CODE BEGIN 1 */

	/* USER CODE END 1 */

	/* MCU Configuration--------------------------------------------------------*/

	/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
	HAL_Init();

	/* USER CODE BEGIN Init */

	/* USER CODE END Init */

	/* Configure the system clock */
	SystemClock_Config();

	/* USER CODE BEGIN SysInit */

	/* USER CODE END SysInit */

	/* Initialize all configured peripherals */
	MX_GPIO_Init();
	MX_I2C1_Init();
	MX_USART1_UART_Init();
	/* USER CODE BEGIN 2 */

	/* USER CODE END 2 */

	/* Infinite loop */
	/* USER CODE BEGIN WHILE */
	//初始化
	HAL_Delay(50);
	char INIT_CMD[3] = { 0xE1, 0x08, 0x00 };
	HAL_I2C_Master_Transmit(&hi2c1, AHT10_ADRESS, INIT_CMD, 3, 0xffff);
	HAL_Delay(50);
	//软复位指令

	//触发测量命令
	uint8_t START_MEASUREMENT_CMD[3] = { 0xAC, 0x33, 0x00 };
	HAL_I2C_Master_Transmit(&hi2c1, AHT10_ADRESS, START_MEASUREMENT_CMD, 3,
			0xffff);
	//延时等待
	HAL_Delay(80);

	char logdata[50];
	while (1) {
		uint8_t rawBuff[6] = { };
		HAL_I2C_Master_Receive(&hi2c1, AHT10_ADRESS, rawBuff, 6, 0xff);

		uint32_t AHT10_ADC_Raw = (((uint32_t) rawBuff[3] & 15) << 16)| ((uint32_t) rawBuff[4] << 8) | rawBuff[5];
		float AHT10_Temperature = (float) (AHT10_ADC_Raw * 200.00 / 1048576.00)- 50.00;

		float AHT10_Humidity = (float) (AHT10_ADC_Raw * 100.00 / 1048576.00);

		int sendLength = sprintf(logdata, "temp:%.2f  humi:%.2f \r",AHT10_Temperature, AHT10_Humidity);
		HAL_UART_Transmit(&huart1, logdata, sendLength, HAL_MAX_DELAY);
		uint8_t START_MEASUREMENT_CMD[3] = { 0xAC, 0x33, 0x00 };
		HAL_I2C_Master_Transmit(&hi2c1, AHT10_ADRESS, START_MEASUREMENT_CMD, 3,0xffff);

		HAL_Delay(200);
		/* USER CODE END WHILE */

		/* USER CODE BEGIN 3 */
	}
	/* USER CODE END 3 */
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值