基于HAL库的STM32温湿度采集与OLED显示

学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:
1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C–读写EEPROM”原理章节)

“软件I2C”(Software I2C)和"硬件I2C"(Hardware I2C)是两种不同的实现方式,用于在微控制器或微处理器上进行I2C通信(Inter-Integrated Circuit,即集成电路之间的串行通信协议)。

软件I2C是指通过软件模拟实现的I2C通信协议,通常在没有硬件支持或者需要额外I2C通信通道时使用。在软件I2C中,通信的时序和数据传输是通过控制GPIO引脚的高低电平来实现的,而不是由硬件外设来管理。软件I2C的实现需要考虑时序的精确性,以及在微控制器上处理并发任务时的效率问题。

硬件I2C是指微控制器或微处理器内置的硬件模块,专门用于处理I2C通信协议。硬件I2C通过专用的硬件引脚和寄存器来管理通信的时序和数据传输,具有更高的时序精度和稳定性。

2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,显示到OLED上,同时通过串口发送到上位机的“串口助手”软件。

在stm32cubemx上配置:

GPIO
在这里插入图片描述

SYS
在这里插入图片描述

RCC
在这里插入图片描述

TIM1
在这里插入图片描述

I2C1
在这里插入图片描述

I2C2
在这里插入图片描述

USART1
在这里插入图片描述

时钟
在这里插入图片描述

在这里插入图片描述

引入AHT20和OLED的库:
在这里插入图片描述

主程序:

    int main(void) {
        HAL_Init();
        SystemClock_Config();
        MX_GPIO_Init();
        MX_I2C1_Init();
        MX_I2C2_Init();
        MX_TIM1_Init();
        MX_USART1_UART_Init();
        uint32_t CT_data[ 2]={ 0, 0} ;
        volatile int c1, t1;
        HAL_Delay(50);
        AHT20_Init();
        HAL_Delay(500);
        u8g2_t u8g2;
        u8g2Init( & u8g2);
        while (1) {
            AHT20_Read_CTdata_crc(CT_data);
            c1 = CT_data[0] * 1000 / 1024 / 1024;//计算得到湿度值c1(放大了10倍>
            t1 = CT_data[1] * 2000 / 1024 / 1024 - 500;//计算得到温度值t1(放大了10倍>
            printf("Await");
            printf("\r\n");
            printf("9");
            HAL_Delay(100);
            printf("8");
            HAL_Delay(100);
            printf("7");
            HAL_Delay(100);
            printf("6");
            HAL_Delay(100);
            printf("5");
            HAL_Delay(100);
            printf("4");
            HAL_Delay(100);
            printf("3");
            HAL_Delay(100);
            printf("2");
            HAL_Delay(100);
            printf("1");
            HAL_Delay(100);
            printf("0");
            HAL_Delay(100);
            printf("\r\n");
            printf("Temperature:%d%d.%d", t1 / 100, (t1 / 10) % 10, t1 % 10);
            printf("\r\n");
            printf("Humidity:%d%d.%d", c1 / 100, (c1 / 10) % 10, c1 % 10);
            printf("\r\n");
            char Onedate[ 20];
            char Twodate[ 20];
            sprintf(Onedate, "Temperature:%d%d.%d", t1 / 100, (t1 / 10) % 10, t1 % 10);
            sprintf(Twodate, "Humidity:%d%d.%d", c1 / 100, (c1 / 10) % 10, c1 % 10);
            u8g2_FirstPage( & u8g2);
            do {
                draw( & u8g2);
                u8g2_ClearBuffer( & u8g2);
                u8g2_DrawStr( & u8g2, 3, 30, Onedate);
                u8g2_DrawStr( & u8g2, 3, 40, Twodate);
            } while (u8g2_NextPage( & u8g2));
        }
    }

实物图:
在这里插入图片描述

总结:

学习好。
修改后可以使用hal库的u8g2库和ath20库 提取码:1234

STM32 HAL是ST公司为STM32系列微控制器提供的一套硬件抽象层,旨在简化开发过程,提高开发效率。使用HAL可以方便地操作STM32的各种外设,包括温湿度传感器。 SHTx系列温湿度传感器(如SHT30、SHT31等)是由Sensirion公司生产的高精度数字温湿度传感器。它们通过I2C接口微控制器通信,具有高精度、低功耗等特点。 下面是一个使用STM32 HAL读取SHTx系列温湿度传感器数据的示例代码: ```c #include "stm32f1xx_hal.h" #include "shtx.h" // 定义I2C句柄 extern I2C_HandleTypeDef hi2c1; // 初始化SHTx传感器 void SHTx_Init(void) { // 初始化I2C接口 HAL_I2C_Init(&hi2c1); } // 读取温湿度数据 HAL_StatusTypeDef SHTx_ReadTempHum(float *temperature, float *humidity) { uint8_t cmd[2] = {0x2C, 0x06}; // 启动测量命令 uint8_t data[6]; HAL_StatusTypeDef status; // 发送启动测量命令 status = HAL_I2C_Master_Transmit(&hi2c1, SHTx_I2C_ADDRESS << 1, cmd, 2, HAL_MAX_DELAY); if (status != HAL_OK) { return status; } // 等待测量完成 HAL_Delay(20); // 读取测量数据 status = HAL_I2C_Master_Receive(&hi2c1, SHTx_I2C_ADDRESS << 1, data, 6, HAL_MAX_DELAY); if (status != HAL_OK) { return status; } // 解析温度和湿度数据 *temperature = ((((data[0] * 256.0 + data[1]) * 175) / 65535.0) - 45); *humidity = ((((data[3] * 256.0 + data[4]) * 100) / 65535.0)); return HAL_OK; } ``` 在这个示例中,`SHTx_Init`函数用于初始化I2C接口,`SHTx_ReadTempHum`函数用于读取温湿度数据。读取到的温度和湿度数据分别存储在`temperature`和`humidity`指针指向的变量中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值