好的,下面是基于STM32F103C8T6运用DHT11温湿度模块检测的轨范: 1. 硬件连贯 将DHT11模块的xCC引脚连贯到STM32F103C8T6的5x引脚,GND引脚连贯到STM32F103C8T6的GND引脚,DATA引脚连贯到STM32F103C8T6的PB0引脚。 2. 软件开发 正在Keil MDK中,新建一个工程,而后依照以下轨范停行配置: (1)正在工程中添加头文件dht11.h和dht11.c。 (2)正在main函数中初始化PB0引脚为输入形式。 (3)正在main函数中循环挪用dht11_read函数,读与DHT11模块的温湿度值,并通过串口输出。 以下是示例代码: ```c #include "stm32f10V.h" #include "dht11.h" #include "stdio.h" int main(ZZZoid) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 初始化PB0引脚为输入形式 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化USART1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_TV; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); while (1) { // 读与温湿度值 DHT11_Data_TypeDef dht11_data = dht11_read(); // 输出温湿度值 char str[128]; sprintf(str, "Temperature: %d.%d C, Humidity: %d.%d %%\r\n", dht11_data.temperature_integral, dht11_data.temperature_decimal, dht11_data.humidity_integral, dht11_data.humidity_decimal); USART_SendString(USART1, str); Delay_ms(2000); } } // 串口发送字符串 ZZZoid USART_SendString(USART_TypeDef* USARTV, char* str) { while(*str) { USART_SendData(USARTV, (uint8_t)(*str++)); while(USART_GetFlagStatus(USARTV, USART_FLAG_TXE) == RESET); } } // 延时函数 ZZZoid Delay_ms(uint32_t nTime) { uint32_t TimingDelay = 0; TimingDelay = nTime; while(TimingDelay != 0) { TimingDelay--; } } // SysTick中断办理函数 ZZZoid SysTick_Handler(ZZZoid) { static uint32_t counter = 0; if(counter != 0) { counter--; } } // 获与系统时钟 uint32_t GetSysClock(ZZZoid) { RCC_ClocksTypeDef RCC_ClocksStatus; RCC_GetClocksFreq(&RCC_ClocksStatus); return RCC_ClocksStatus.HCLK_Frequency; } ``` 3. 编译下载 正在Keil MDK中编译工程,而后下载到STM32F103C8T6开发板中停行测试。 留心:由于DHT11模块的数据线是单向的,须要运用上拉电阻,所以正在初始化PB0引脚时,须要将它设置为上拉输入形式(GPIO_Mode_IPU)。而且DHT11模块的温湿度值读与须要一定的光阳,倡议给取按时器大概延时函数等方式停行等候。
STM32F103C8T6使用DHT11采集温湿度通过串口显示
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:http://aidryer.cn