stm32f103c8t6单片机毕设为什么选用dht11温湿度传感器
时间: 2024-05-18 19:10:08 浏览: 29
STM32F103C8T6单片机是一款性能稳定、功能强大的微控制器,常用于嵌入式系统的开发。而DHT11温湿度传感器是一种常用的数字温湿度传感器,具有精度高、成本低、体积小等优点,非常适合在STM32F103C8T6单片机毕设中作为测量环境温湿度的传感器。
通过与STM32F103C8T6单片机的连接,可以实现对DHT11传感器的数据采集,并将采集到的温湿度值进行处理,最终将数据显示在LCD屏幕上或者通过网络传输等方式进行应用。
因此,选用DHT11温湿度传感器作为STM32F103C8T6单片机毕设的测量对象,不仅有助于提高毕设的实用性和创新性,而且可以在实践中深入了解STM32F103C8T6单片机的应用和DHT11传感器的工作原理。
相关问题
stm32f103c8t6单片机使用DHT11温湿度监测模块的核心程序
本文给出stm32f103c8t6单片机使用DHT11温湿度监测模块的核心程序,使用C语言开发,可供参考。程序包括DHT11初始化以及读取数据的函数。
1. DHT11初始化
```
void DHT11_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能 PORTB 时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/* 配置 PB12 为输出 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* 设置 PB12 输出高电平 */
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
```
2. 读取DHT11数据
```
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{
u8 i=0,j=0;
/* 数组清零操作 */
humi[0]=humi[1]=temp[0]=temp[1]=temp[2]=temp[3]=0;
/* 输出数据总线设置为低电平 */
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
/* 延时18ms */
Delay_ms(18);
/* 输出数据总线设置为高电平 */
GPIO_SetBits(GPIOB, GPIO_Pin_12);
/* 设置数据总线为输入模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* 检测 DHT11 响应信号,判断是否有效 */
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)!=Bit_RESET)
{
/* 数据总线未检测到有效响应,返回错误 */
return DHT11_ERROR_RESPONSE;
}
/* DHT11 数据位,从高到低依次读取 5Bytes 数据,每个字节 8bit */
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
/* 接收数据,时间片为 45us,最高电平持续时间大于等于 70us 表示高电平,否则为低电平 */
while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==Bit_RESET); /* 等待数据总线变高 */
Delay_us(50);
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==Bit_SET)
{
/* 高电平,数据位为 1 */
humi[i%2]|=(0x80>>j); /* 数据位依次存入 humi 数组 */
}
while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==Bit_SET); /* 等待数据总线变低 */
}
}
/* 重置数据总线 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
/* 校验读取数据是否正确 */
if(humi[0]+humi[1]+temp[0]+temp[1]+temp[2]+temp[3]!=humi[2])
{
/* 数据校验出错,返回错误 */
return DHT11_ERROR_CHECKSUM;
}
return DHT11_SUCCESS;
}
```
这段代码将气温数据存储在temp变量中,湿度数据存储在humi变量中,并且验证数据的正确性。同时,需要注意的是,这里使用了delay函数,程序中需要定义delay_ms和delay_us两个函数,在程序中调用时Delay_ms(18)和Delay_us(50)表示需要延时18毫秒和50微秒。
详细介绍一下DHT11与STM32F103C8T6单片机的引脚连接,并详细介绍为什么这样接
DHT11是一款数字温湿度传感器,与STM32F103C8T6单片机的引脚连接如下:
DHT11引脚 | STM32F103C8T6引脚
---------|--------------------
VCC | 3.3V电源
GND | GND
DATA | PB12
其中,VCC和GND分别连接到STM32F103C8T6单片机的3.3V电源和GND引脚,DATA连接到PB12引脚。
DHT11传感器输出的数字信号是一种时间序列信号,需要通过STM32F103C8T6单片机的计时器模块来捕获。PB12引脚是TIM4_CH1引脚,支持输入捕获功能,可以通过配置TIM4定时器模块的输入捕获模式来读取DHT11传感器输出的数字信号。同时,PB12引脚也支持上拉电阻,可以提高信号的稳定性。
因此,将DHT11的DATA引脚接到PB12引脚可以方便地读取温湿度传感器的数据,并保证信号的稳定性。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)