硬件I2C与软件I2C
硬件I2C是直接利用 STM32 芯片中的硬件 I2C 外设,在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。软件I2C直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。区别:硬件I2C速度快,而软件I2C更灵活。
实验内容
系统时钟(RCC配置)
SYS配置
USART1配置
GPIO配置
I2C1配置
NVIC配置
时钟配置
生成项目
更改代码main.c
#include<stdio.h> int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
添加AHT20的头文件
#include "AHT20-21_DEMO_V1_3.h"
在while循环下添加下列代码
printf("start read...\r\n"); /* USER CODE END WHILE / AHT20_Read_CTdata(CT_data);//没有CRC校验,直接读取AHT20的温度和湿度数据 HAL_Delay(1500);//延时等待本次读取 c1 = CT_data[0]1000/1024/1024; //计算得到湿度值c1(放大了10倍) t1 = CT_data[1]2000/1024/1024-500;//计算得到温度值t1(放大了10倍) printf("temperature:%d%d.%d ",t1/100,(t1/10)%10,t1%10); printf("humidity:%d%d.%d\r\n",c1/100,(c1/10)%10,c1%10); printf("waiting next...\r\n"); printf("\n"); HAL_Delay(500);//延时0.5s等待,下一次的测量 / USER CODE BEGIN 3 */
烧录结果
总结
通过这次实验,熟悉IIC协议的规范,确保正确配置MCU和传感器的相关参数。在实际应用中,根据需求选择合适的温湿度传感器,考虑传感器的精度、响应时间、成本等因素。多次实践和学习,不断提高自己在IIC协议读取温湿度数据方面的技能。