
STM32F103与DHT11温湿度传感器实例代码
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本项目提供了一个详细的教程和实例代码,展示如何使用STM32F103微控制器读取DHT11数字温湿度传感器的数据。通过该教程,开发者可以轻松获取环境中的温度和湿度信息,并实现数据处理与显示功能。
STM32F103配合DHT11温湿度传感器的读写例程
下面提供一个使用STM32F103微控制器与DHT11温湿度传感器进行数据交互的基本示例代码,该程序能够实现对环境温度和湿度的有效监测。此例程主要涉及初始化GPIO引脚、设置定时器以及编写用于处理DHT11协议的函数等步骤。
首先,在项目中定义好相关的宏定义及变量:
```c
#define DHTPIN PA8 // 定义与DHT11连接的STM32 GPIO引脚
uint8_t humiData[5]; // 存储湿度数据数组
```
接着,编写初始化函数用于配置GPIO端口和定时器等硬件资源:
```c
void Dht_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 开启GPIO A时钟
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
GPIO_InitStructure.GPIO_Pin = DHTPIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// 初始化DHT11引脚为推挽输出模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 48) - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); // 初始化定时器
}
```
然后,编写读取DHT11传感器数据的函数:
```c
uint8_t Dht_ReadData(uint8_t pin)
{
uint32_t count, i;
GPIO_WriteBit(GPIOA, pin, Bit_RESET);
TIM_SetCounter(TIM2, 0); // 清除计数器
while (TIM_GetCapture1(TIM2) == 0); // 等待DHT响应
for(i=0; i<35; i++) GPIO_ReadInputDataBit(GPIOA,pin);
TIM_SetCounter(TIM2, 0);
count = TIM_GetCapture1(TIM2);
return (count > DHTCOUNT) ? 1 : 0;
}
```
最后,编写用于读取温湿度值的主函数:
```c
void ReadDht(void)
{
uint8_t i;
GPIO_WriteBit(GPIOA, DHTPIN, Bit_SET);
for(i=0; i<5; i++) humiData[i] = 0;
if(Dht_ReadData(DHTPIN) != 1) return; // 检测DHT响应
for (i = 0; i < 40 ; i++)
{
if ((i % 8 == 0))
humiData[i / 8] <<= 1;
GPIO_WriteBit(GPIOA, DHTPIN, Bit_RESET);
while(TIM_GetCapture1(TIM2) <= DHTCOUNT); // 等待高电平
if (TIM_GetCapture1(TIM2) > DHTCOUNT)
humiData[i / 8] |= 0x01;
GPIO_WriteBit(GPIOA, DHTPIN, Bit_SET);
}
}
```
以上就是使用STM32F103读取DHT11传感器数据的基本步骤,通过上述代码可以实现对温湿度值的准确采集。
全部评论 (0)


