代码框架直接使用STM32CubeMX生成,项目主要内容就是搞清DHT11接收数据的时序,接收到数据以后用ESP8266作为客户端往Yeelink服务器上发数据包。
1.DHT11
看懂传感器手册,接收数据就一根线,要注意根据手册里的协议配置接收端口的输入输出,协议里有用到10us级别的延时,一开始我想配置1us的时间中断来实现延时,结果发现好像是中断响应太快,中断出不来了,就配置成10us一次中断,成功读出了数据。
RH是数据接收前的协议流程,COM是开始真正的数据接收部分,变量都是全局unsigned char变量,代码是根据现成的51单片机例程改的:
void RH(void)
{
DHT_Set_Output();
//延时18ms
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_14,GPIO_PIN_RESET);
delay_ms(18);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_14,GPIO_PIN_SET);
//延时20us
delay_10us(2);
//设置引脚为输入模式
DHT_Set_Input();
if(!(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_14)))
{
U8FLAG=2;
while((!(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_14))) && U8FLAG++);
U8FLAG=2;
while((