stm32f103rct6使用dht11获取温湿度的代码
时间: 2023-08-22 11:03:32 浏览: 264
以下是使用STM32F103RCT6获取DHT11传感器温湿度数据的代码:
```c
#include "stm32f10x.h"
#include "delay.h"
GPIO_InitTypeDef GPIO_InitStructure;
void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Delay_us(uint32_t us)
{
uint32_t i;
while(us--)
{
i=7;
while(i--);
}
}
uint8_t ReadDHT11(void)
{
uint8_t i, j;
uint8_t data = 0, check_sum = 0;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
Delay_us(1000);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
Delay_us(18000);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
Delay_us(30);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
for(j=0; j<8; j++)
{
i = 0;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
if(i > 40)
data |= (1 << (7-j));
}
for(j=0; j<8; j++)
{
i = 0;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
if(i > 40)
check_sum |= (1 << (7-j));
}
if(check_sum == (data>>8))
return data;
else
return 0;
}
int main(void)
{
uint8_t temp, humi;
SystemInit();
Delay_Init();
GPIO_Configuration();
while(1)
{
temp = ReadDHT11();
humi = ReadDHT11();
printf("Temperature: %d.%dC, Humidity: %d.%d%%\n", temp>>8, temp&0xff, humi>>8, humi&0xff);
Delay_Ms(1000);
}
}
```
该代码通过STM32F103RCT6的GPIO口读取DHT11传感器的数据,然后将温度和湿度值打印到串口输出。注意,该代码需要先初始化GPIO口和延时函数。
阅读全文