STM32作业实现(五)温湿度传感器dht11
目录
STM32作业设计
STM32作业实现(一)串口通信
STM32作业实现(二)串口控制led
STM32作业实现(三)串口控制有源蜂鸣器
STM32作业实现(四)光敏传感器
STM32作业实现(五)温湿度传感器dht11
STM32作业实现(六)闪存保存数据
STM32作业实现(七)OLED显示数据
STM32作业实现(八)触摸按键TPAD
STM32作业实现(九)驱动舵机
源码位置
编写dht11(温湿度传感器)驱动文件

打开pa7引脚用于传输数据,tim1用做计时器(微秒级定时器,因为时钟频率72MHz,分频72之后计数一次为1us)

在项目所在路径的Core目录中Src下添加源文件,Inc下添加头文件
Keil uVision5中添加新建的源文件,在源文件中include头文件后编译



core下的src 新建并添加一个dht11.c的文件,在core下的Inc也同步新建dht11.h的空文件


编写驱动文件内容
dht11.h
#ifndef __DHT11_H__
#define __DHT11_H__#include "main.h"
#include "tim.h"uint8_t DHT_read(void); // 读取温湿度#endif
dht11.c
#include "dht11.h"uint8_t dht11_data[5] = {0, 0, 0, 0, 0};// 将GPIO引脚设置为输出
void SET_PIN_OUTPUT()
{GPIO_InitTypeDef GPIO_InitStruct = {0};/*Configure GPIO pin : PA7 */GPIO_InitStruct.Pin = GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 输出模式GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// 将GPIO引脚设置为输入
void SET_PIN_INPUT()
{GPIO_InitTypeDef GPIO_InitStruct = {0};/*Configure GPIO pin : PA7 */GPIO_InitStruct.Pin = GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// 微秒级延时
void Delay_us(uint16_t us)
{uint16_t us_cnt = us;__HAL_TIM_SET_COUNTER(&htim1, 0); // 设置计数器起始值HAL_TIM_Base_Start(&htim1); // 启动定时器while (htim1.Instance->CNT < us_cnt); // 循环等待HAL_TIM_Base_Stop(&htim1);
}
// 电平读取函数,每8个电平存一个字节
uint8_t DGT_read_byte()
{uint8_t read_byte; // 读取到的电平uint8_t hp = 0; // 防止死循环for (uint8_t i = 0; i < 8; i++){read_byte <<= 1;// 先判断此时引脚的电平状态,如果是低电平就一直循环等待,while ((HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_RESET) && hp < 100){Delay_us(1); // 等待1ushp++;}// 直到高电平出现,高电平出现后延时 40us,Delay_us(40);// 并读取延时后的电平状态,如果此时是高电平,则数据为 1,否则为 0if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_SET){read_byte++;}hp = 0;// 等待低电平到来,开启下一次读取数据或结束while ((HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_SET) && hp < 100){Delay_us(1); // 等待1ushp++;}}return read_byte;
}
// DHT11温湿度读取程序
uint8_t DHT_read(void)
{// 总线控制权在32// 发送18毫秒低电平SET_PIN_OUTPUT(); // 将引脚设置为输出HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // 设置低电平HAL_Delay(18);// 拉高一段时间高电平HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);Delay_us(20);// 总线控制在DHT11SET_PIN_INPUT();// 如果读取到低电平,说明DHT11有响应if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_RESET){uint8_t hp = 0; // 防卡死// 等待反转高电平while ((HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_RESET) && hp < 100){Delay_us(1);hp++;}hp = 0;// 等待低电平到来,低电平到来后读取数据while ((HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) == GPIO_PIN_SET) && hp < 100){Delay_us(1);hp++;}// 开始读取数据for (uint8_t i = 0; i < 5; i++){dht11_data[i] = DGT_read_byte();}// 读取结束等待50usDelay_us(50);// 校验数据uint32_t sum = dht11_data[0] + dht11_data[1] + dht11_data[2] + dht11_data[3];if ((sum & 0x000000ff) == dht11_data[4])return 1;}return 0;
}相关文章:
STM32作业实现(五)温湿度传感器dht11
目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…...
java mybatis处理大数据量,开启和配置二级缓存,及注意事项,已解决
注意事项: 尽量避免使用下面方式写sql否则会降低服务器性能: mybatis二级缓存开启后,避免使用事务注解(加上事务注解后二级缓存数据会导致两次访问不一致问题): 3. 返回的对象实体类,要实现Se…...
在 LLM 架构中应用多专家模型
本文转载自:在 LLM 架构中应用多专家模型 2024年 3月 14日 By Kyle Kranen and Vinh Nguyen https://developer.nvidia.cn/zh-cn/blog/applying-mixture-of-experts-in-llm-architectures/ 文章目录 一、概述二、LLM 架构领域的专家齐聚一堂1、模型容量2、MoE 在降低…...
C语言编程代码软件:深入探索与实战应用
C语言编程代码软件:深入探索与实战应用 在编程的广袤领域中,C语言以其独特的魅力吸引着无数编程爱好者。作为一种基础且强大的编程语言,C语言在软件开发、系统编程、嵌入式系统等领域发挥着不可替代的作用。而要想熟练掌握C语言,…...
【AIGC半月报】AIGC大模型启元:2024.06(上)
AIGC大模型启元:2024.06(上) (1) ChatTTS(语音合成项目) (1) ChatTTS(语音合成项目) 2024.06.01 ChatTTS 文本转语音项目爆火出圈,引来大家极大的关注。短短三天时间,在…...
两款 IntelliJ IDEA 的 AI 编程插件
介绍两款 IntelliJ IDEA 的 AI 编程插件:通义灵码和 CodeGeeX。 通义灵码 这是由阿里推出的一个基于通义大模型的 AI 编码助手。 它提供了代码智能生成、研发智能问答等功能。通义灵码经过海量优秀开源代码数据训练,可以根据当前代码文件及跨文件的上下…...
语义化版本控制:软件工程的实用之道
语义化版本控制:软件工程的实用之道 在软件开发过程中,版本控制是确保项目稳定、有序进行的关键环节。随着项目的发展,功能的增加、错误的修复以及API的修改变得日益频繁。为了有效管理这些变化,并确保团队成员、用户以及依赖该软…...
Java设计模式总结
《武林外传》老白曾经说过这样一句话。高手就是手里无刀,心中也无刀。 类似于设计模式,你不知不觉中已经融进你的代码中了,但你并不知已经运用了。下面我总结几个我觉得比较常用的设计模式。 1:设计模式分类 总体来说设计模式分为…...
小米路由器如何设置去广告功能,如何设置小米路由器的自定义Hosts(小米路由器如何去除小米广告、去除小米电视盒子开屏广告、视频广告)
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 实现方案 📒📝 操作步骤📝 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 小米设备的广告一直是用户头疼的问题,无论是开屏广告、应用内广告还是系统广告,都影响了用户体验。本文将详细介绍如何通过小米路由器实现去除广告…...
HCIP-Datacom-ARST自选题库__EBGP【18道题】
一、单选题 1.在排除EBGP邻居关系故障时,你发现两台直连设备使用Loopback口建立连接,故执行display current-configurationconfiguration bgp查看peer ebgp-max-hop hop-count的配置,下列哪项说法是正确的? hop-count必须大于2 hop-count…...
TypeScript算法每日一题:两数之和(167)
作者:前端小王hs 阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主 题库:力扣 题目序号:167(简单) 题目: 给你一个下标从1开始的整数数组 numbers ,该数组已按非…...
用docker搭建的Vulfocus镜像管理界面没有镜像可以拉取解决办法
ps:截止到今天2023.4.2,kali和vps的docker拉取的vulfocus镜像会有版本的区别,虽然都是拉取的最新版,vps上镜像为3个月以前,kali上为16个月以前,所以在修改 views.py 文件时,可能会发现文件内容不…...
CSPM.pdf
PDF转图片 归档:...
多个短视频剪辑成一个视频:四川京之华锦信息技术公司
多个短视频剪辑成一个视频:创作中的艺术与技术 在数字时代,短视频以其短小精悍、内容丰富的特点,迅速成为社交媒体上的热门内容形式。然而,有时单一的短视频难以完全表达创作者的意图或满足观众的观赏需求。因此,将多…...
算法第三天力扣第69题:X的平方根
69. x 的平方根 (可点击下面链接或复制网址进行做题) https://leetcode.cn/problems/sqrtx/https://leetcode.cn/problems/sqrtx/ 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被…...
异常处理。
异常 是指程序运行中出现了错误。 捕获异常: 对bug进行提醒,使整个程序继续运行。 捕获所有异常: try:#可能出错的代码 except:如果出现异常执行的代码 可以输出异常的类型: try:a1bhuishprint(ab) except Exception as i:…...
MySQL—函数(介绍)—字符串函数(基础)
一、引言 提到函数,在SQL分类中DQL语句中有一个聚合函数,如COUNT()、SUM()、MAX()等等。这些都是一些常见的聚合函数,而聚合函数只是函数的一种,接下来会详细的学习和介绍一下函数的应用场景和以及 mysql 当中文件的函数有哪些。 …...
CTF本地靶场搭建——静态flag题型的创建
静态flag题型的创建 首先这里要说的是静态flag和动态flag。 在CTF(Capture The Flag)比赛中,静态flag的使用通常与特定的赛制或题目类型关联,而不是直接与题型绑定。静态flag意味着这些flag是预先设定好的,不会随比…...
基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)
上一篇:搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL(四) 下一篇:基于Django的博客系统之增加类别导航栏(六) 功能概述 添加搜索框用于搜索博客。 需求详细描述 1. 添加搜索框用于搜索博客 描…...
开源VS闭源:大模型发展路径之争,你站哪一派?
文章目录 引言一、数据隐私1.1开源大模型的数据隐私1.2 闭源大模型的数据隐私1.3 综合考量 二、商业应用2.1 开源大模型的商业应用2.2 闭源大模型的商业应用2.3 商业应用的综合考量 三、社区参与3.1 开源大模型的社区参与3.2 闭源大模型的社区参与3.3 综合考量 结论 引言 在人…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
