STM32F103温湿度传感器
时间: 2024-12-30 18:23:38 浏览: 13
### STM32F103与温湿度传感器连接及配置
#### GPIO外设配置
为了使STM32能够读取来自温湿度传感器的数据,需要先对外部中断线(EXTI)以及通用输入/输出端口(GPIO)进行初始化设置。对于DHT11这类简单的数字信号传感器而言,仅需将对应的GPIO引脚设定为输入模式即可实现基本通信功能[^2]。
```c
// 初始化 DHT11 所使用的 GPIO 引脚
void DHT_GPIO_Init(void){
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE(); // 开启 PB 端口时钟
GPIO_InitStruct.Pin = GPIO_PIN_4; // 设置具体引脚编号
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不带上下拉电阻
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // 应用上述参数至指定引脚
}
```
#### 数据采集函数编写
针对不同类型的温湿度传感器可能有不同的数据传输协议,在这里以DHT11为例展示了一个用于启动一次测量过程并向该器件请求最新采样结果的方法:
```c
uint8_t DHT_Read_Data(uint8_t *data){
uint8_t i,j;
for(i=0;i<5;i++) data[i]=0;
/*省略部分代码*/
return 1;
}
```
此方法内部实现了对DHT11特定握手序列的支持,并解析返回的有效载荷字节流填充到传入指针指向的位置中去。
#### UART串行通讯调试打印
为了让开发者更方便地观察实际运行状况下的各项指标变化情况,可以借助于单片机自带的UART接口向电脑发送实时更新的信息片段作为辅助手段之一:
```c
char buffer[64];
sprintf(buffer,"Temperature:%d.%dhumidity:%d.%d\r\n",temp_integer,temp_decimal,humid_integer,humid_decimal);
HAL_UART_Transmit(&huart1,(uint8_t*)buffer,strlen(buffer),0xFFFF);
```
这段代码会构造一条字符串消息并通过USART1通道向外广播出去,其中包含了温度和相对湿度两个物理量的具体数值表示形式[^1]。
阅读全文