本资源提供基于STM32F407单片机通过I/O接口读取DHT11温湿度传感器数据,并将采集的信息传输至串口屏进行实时显示的完整软件工程源代码。
STM32F407单片机读取并显示OneWire_DHT11温湿度传感器数据(通过串口屏)的软件工程源码可以作为学习设计参考。
```c
int main(void){
/* 初始化所有外设、Flash接口和系统滴答定时器 */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
/* 初始化串口并配置串口中断优先级 */
MX_DEBUG_USART_Init();
HMI_USARTx_Init();
DHT11_Init();
/* 无限循环 */
while (1) {
if(DHT11_Read_TempAndHumidity(&DHT11_Data)==SUCCESS){
HMI_value_setting(page1.gross.val,DHT11_Data.humidity*10);
HMI_value_setting(page1.net.val,DHT11_Data.temperature*10);
printf(读取DHT11成功!-->湿度为%.1f %RH ,温度为 %.1f℃ \n,
DHT11_Data.humidity,DHT11_Data.temperature);
} else {
printf(读取DHT11信息失败\n);
}
HAL_Delay(1000);
}
}
/** 函数功能: 向串口屏发送数据
* 输入参数: 无
* 返 回 值: 无
*/
void HMI_value_setting(const char *val_str,uint32_t value){
uint8_t tmp_str[30]={0};
uint8_t i;
sprintf((char *)tmp_str,%s=%d,val_str,value);
for(i=0;iDR=tmp_str[i];
while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET);
}
HMI_USARTx->DR=0xFF;
while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET);
HMI_USARTx->DR=0xFF;
while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET);
HMI_USARTx->DR=0xFF;
while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET);
}
/** 函数功能: 向串口屏发送浮点数据
* 输入参数: 无
* 返 回 值: 无
*/
void HMI_string_setting(const char *val_str,int32_t value){
uint8_t tmp_str[50]={0};
uint8_t i;
float temp=(float)value;
sprintf((char *)tmp_str,%s=\%.1f\,val_str,temp/100);
for(i=0;iDR=tmp_str[i];
while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET);
}
HMI_USARTx->DR=0xFF;
}
```