当前位置:实例文章 » 其他实例» [文章]STM32案例学习 GY-39环境监测传感器模块

STM32案例学习 GY-39环境监测传感器模块

发布人:shili8 发布时间:2025-02-03 21:00 阅读次数:0

**STM32案例学习:GY-39环境监测传感器模块**

在本文中,我们将使用STM32微控制器作为平台,来学习如何与GY-39环境监测传感器模块进行通信。GY-39是一款便捷的环境监测传感器模块,可以实时读取温度、湿度和气压等参数。

**硬件准备**

* STM32F103C8T6微控制器* GY-39环境监测传感器模块* USB-B接口线* JTAG调试线**GY-39环境监测传感器模块的功能**

GY-39环境监测传感器模块具有以下功能:

* 温度检测:可以实时读取温度值,范围从-40°C到85°C。
* 湿度检测:可以实时读取湿度值,范围从0%到100%。
* 气压检测:可以实时读取气压值,范围从300mbar到1100mbar。

**GY-39环境监测传感器模块的接口**

GY-39环境监测传感器模块具有以下接口:

* I2C接口(SCL和SDA)
* SPI接口(SCK、MISO、MOSI和SS)
* UART接口(TXD和RXD)

**STM32与GY-39环境监测传感器模块的通信**

在本文中,我们将使用I2C接口来进行通信。首先,我们需要配置I2C时钟频率,然后初始化GY-39环境监测传感器模块。

c// STM32F103C8T6微控制器的I2C时钟频率配置void I2C_Config(void)
{
 // 配置I2C时钟频率为400kHz RCC->APB1ENR |= (1 << 21); // 启动I2C时钟 RCC->APB1ENR &= ~(1 << 20);
 RCC->APB1ENR |= (1 << 19);
 I2C->CR1 = (1 << 0) | (1 << 1) | (1 << 4); // 配置I2C时钟频率为400kHz}

// 初始化GY-39环境监测传感器模块void GY_39_Init(void)
{
 I2C_Config(); // 配置I2C时钟频率 I2C->CR1 |= (1 << 15); // 启动I2C while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 I2C->DR =0x76; // 写入GY-39环境监测传感器模块的地址 while (!(I2C->SR1 & (1 << 16))); // 等待传输完成}


**读取温度、湿度和气压值**

在本文中,我们将使用GY-39环境监测传感器模块来读取温度、湿度和气压值。

c//读取温度值uint16_t GY_39_Read_Temperature(void)
{
 I2C->CR1 |= (1 << 15); // 启动I2C while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 I2C->DR =0x00; // 写入GY-39环境监测传感器模块的命令字节 while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 uint8_t temperature_high = I2C->DR;
 I2C->CR1 |= (1 << 15); // 启动I2C while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 I2C->DR =0x00; // 写入GY-39环境监测传感器模块的命令字节 while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 uint8_t temperature_low = I2C->DR;
 return ((temperature_high << 8) | temperature_low);
}

//读取湿度值uint16_t GY_39_Read_Humidity(void)
{
 I2C->CR1 |= (1 << 15); // 启动I2C while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 I2C->DR =0x01; // 写入GY-39环境监测传感器模块的命令字节 while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 uint8_t humidity_high = I2C->DR;
 I2C->CR1 |= (1 << 15); // 启动I2C while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 I2C->DR =0x01; // 写入GY-39环境监测传感器模块的命令字节 while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 uint8_t humidity_low = I2C->DR;
 return ((humidity_high << 8) | humidity_low);
}

//读取气压值uint16_t GY_39_Read_Pressure(void)
{
 I2C->CR1 |= (1 << 15); // 启动I2C while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 I2C->DR =0x02; // 写入GY-39环境监测传感器模块的命令字节 while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 uint8_t pressure_high = I2C->DR;
 I2C->CR1 |= (1 << 15); // 启动I2C while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 I2C->DR =0x02; // 写入GY-39环境监测传感器模块的命令字节 while (!(I2C->SR1 & (1 << 16))); // 等待传输完成 uint8_t pressure_low = I2C->DR;
 return ((pressure_high << 8) | pressure_low);
}


**总结**

在本文中,我们学习了如何使用STM32微控制器与GY-39环境监测传感器模块进行通信。GY-39环境监测传感器模块可以实时读取温度、湿度和气压等参数。我们配置了I2C时钟频率,然后初始化GY-39环境监测传感器模块。最后,我们使用GY-39环境监测传感器模块来读取温度、湿度和气压值。

**参考**

* STM32F103C8T6微控制器的数据手册* GY-39环境监测传感器模块的数据手册

其他信息

其他资源

Top