当前位置: 首页 > news >正文

STM32 HAL DHT11驱动程序

DHT11驱动程序会占用TIM3定时器,进行高精度延时。程序共包含4个文件 

DHT11.c DHT11.h delay.c delay.h

DHT11.c

#include "stm32f1xx_hal.h"
#include "dht11.h"
#include "delay.h"  // 添加延时头文件
#define DHT_PORT  GPIOB
#define DHT_PIN  GPIO_PIN_10
//配置A9为输出模式
void DHT11_Output_Mode(void)
{GPIO_InitTypeDef GPIO_InitStructure;__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStructure.Pin   = DHT_PIN; 	GPIO_InitStructure.Mode  = GPIO_MODE_OUTPUT_PP;	//推挽输出GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStructure.Pull  = GPIO_NOPULL;HAL_GPIO_Init(DHT_PORT, &GPIO_InitStructure);
}
//配置A9为输入模式
void DHT11_Input_Mode(void)
{GPIO_InitTypeDef GPIO_InitStructure;__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStructure.Pin   = DHT_PIN; 	//9号引脚GPIO_InitStructure.Mode  = GPIO_MODE_INPUT;  //浮空输入GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStructure.Pull  = GPIO_NOPULL;HAL_GPIO_Init(DHT_PORT, &GPIO_InitStructure);
}//A9输出电平0/1
void DHT11_DQ_OUT(uint8_t BitValue)
{HAL_GPIO_WritePin(DHT_PORT, DHT_PIN, (GPIO_PinState)BitValue);
}//A9读取输入电平0/1
uint8_t DHT11_DQ_IN(void)
{return HAL_GPIO_ReadPin(DHT_PORT, DHT_PIN);
}//DHT11复位信号
void DHT11_Reset(void)
{DHT11_Output_Mode();DHT11_DQ_OUT(0);//拉低DQ,复位信号的开始delay_ms(20);//拉低至少18msDHT11_DQ_OUT(1);// 将DHT11的DQ引脚拉高,结束复位信号delay_us(25); //在拉高DQ之后,DHT11会开始其内部复位过程,拉高20-40us
}//检测是否有DHT11存在,0存在,1不存在
uint8_t DHT11_Check(void)
{uint8_t retry = 0;//初始为0,用来重复计次DHT11_Input_Mode();//设置PA9为输入模式,接收DHT11信号// 等待DHT11拉低DQ引脚,这通常发生在复位信号之后的40-80微秒内while(DHT11_DQ_IN() && retry < 100)//DHT拉低40-80us{retry++;//每次循环计次加一delay_us(1);}//如果在计次100次内没有被拉低,返回1则认为DHT11没有响应,否则重置计次变量为0,//为下一次等待阶段做准备if(retry >= 100) return 1; else {retry = 0;}// 等待DHT11拉高DQ引脚,在拉低之后的40-80微秒内// 如果DQ在100次重试内没有被拉高,同样认为DHT11没有正确响应while(!DHT11_DQ_IN() && retry < 100)//DHT会再拉高40-80us{retry++;delay_us(1);}if(retry >= 100) return 1;return 0;}
//检测DHT11是否响应,1无,0有
uint8_t DHT11_Init(void)
{DHT11_Output_Mode();//DHT11_Rst函数中也执行,但为了确保在复位之前引脚状态正确,再次设置DHT11_Reset();//重置DHT11return DHT11_Check();//检测是否DHT11响应
}//读取一个位1/0
uint8_t DHT11_Read_Bit(void)
{uint8_t retry = 0;while(DHT11_DQ_IN() && retry < 100)//DHT会拉低40-80us{retry++;delay_us(1);}retry = 0;while(!DHT11_DQ_IN() && retry < 100)//DHT会拉低40-80us{retry++;delay_us(1);}// 根据DHT11的通信协议,拉高DQ引脚后会保持一段时间// 对于数据位1,DQ引脚会在50微秒内保持高电平;对于数据位0,DQ引脚会在30微秒内拉低// 取中间值等待40微秒delay_us(40);if(DHT11_DQ_IN()) return 1;else return 0;
}
//读取一个字节
uint8_t DHT11_ReadByte(void)
{uint8_t i,Dat = 0;for(i = 0; i < 8; i++){Dat <<= 1;Dat |= DHT11_Read_Bit();//Dat某一位或运算上1必定为1,或上0位不变}return Dat;
}
//temp温度数据范围0-50度
//humi湿度数据范围20-90%
//指向存储温度数据的uint8_t变量的指针temp,
//指向存储湿度数据的uint8_t变量的指针humi
//返回值0表示读取成功,1读取失败
uint8_t DHT11_ReadData(uint8_t * temp,uint8_t *humi)
{uint8_t DHT11_Buff[5];//用来存读取DHT11得到的5个字节数据uint8_t i;DHT11_Reset();//复位DHT11if(DHT11_Check() == 0)//如果存在DHT11,读取温湿度数据{for(i = 0;i < 5;i++){DHT11_Buff[i] = DHT11_ReadByte();}//验证数据的完整性,计算前4个字节的和与第5个字节校验和进行比较if(DHT11_Buff[0] + DHT11_Buff[1] + DHT11_Buff[2] + DHT11_Buff[3] ==         DHT11_Buff[4]){*temp = DHT11_Buff[2];//温度整数数据*humi = DHT11_Buff[0];//湿度整数数据//小数部分为0不用读取}}else{return 1;//读取失败}return 0;//存在DHT11
}

DHT11.h

#ifndef  __DHT11_H__
#define	 __DHT11_H__
#include<stdint.h>
#include "delay.h"// DHT11初始化函数,检测传感器是否存在
// 返回0表示存在,返回1表示不存在
uint8_t DHT11_Init(void);// 配置DHT11数据引脚为输入模式
// 用于读取DHT11发送的数据
void DHT11_Input_Mode(void);// 配置DHT11数据引脚为输出模式
// 用于向DHT11发送命令信号
void DHT11_Output_Mode(void);// 控制DHT11数据引脚输出高低电平
// 参数BitValue: 0表示输出低电平,1表示输出高电平
void DHT11_DQ_OUT(uint8_t BitValue);// 读取DHT11数据引脚的电平状态
// 返回值: 0表示低电平,1表示高电平
uint8_t DHT11_DQ_IN(void);// 发送复位信号给DHT11
// 拉低数据线至少18ms,然后拉高20-40us,启动DHT11
void DHT11_Reset(void);// 检测DHT11是否响应复位信号
// 返回0表示DHT11响应正常,返回1表示无响应
uint8_t DHT11_Check(void);// 从DHT11读取一个位的数据
// 返回值: 读取到的位值(0或1)
uint8_t DHT11_Read_Bit(void);// 从DHT11读取一个字节的数据
// 返回值: 读取到的字节值
uint8_t DHT11_ReadByte(void);// 读取DHT11的温湿度数据
// 参数temp: 指向存储温度数据的变量的指针(范围0-50℃)
// 参数humi: 指向存储湿度数据的变量的指针(范围20-90%)
// 返回值: 0表示读取成功,1表示读取失败
uint8_t DHT11_ReadData(uint8_t *temp, uint8_t *humi);#endif

 delay.c

#include "delay.h"
#include "stm32f1xx_hal.h"TIM_HandleTypeDef htim3;/*** @brief  初始化定时器3用于延时* @param  无* @retval 无*/
void Delay_Init(void)
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};/* 使能TIM3时钟 */__HAL_RCC_TIM3_CLK_ENABLE();/* 基础配置 */htim3.Instance = TIM3;htim3.Init.Prescaler = 72-1;  // 72MHz / 72 = 1MHz,即计数频率为1MHz,计数周期为1ushtim3.Init.CounterMode = TIM_COUNTERMODE_UP;htim3.Init.Period = 0xFFFF;  // 最大计数值htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim3) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK){Error_Handler();}/* 启动定时器 */HAL_TIM_Base_Start(&htim3);
}/*** @brief  微秒级延时* @param  nus: 延时的微秒数,范围:0~65535* @retval 无*/
void delay_us(uint16_t nus)
{uint16_t differ;uint16_t ticks = nus;uint16_t start = __HAL_TIM_GET_COUNTER(&htim3);while(1){uint16_t now = __HAL_TIM_GET_COUNTER(&htim3);if(now < start)differ = now + 65536 - start;  // 处理计数器溢出elsediffer = now - start;if(differ >= ticks)break;}
}/*** @brief  毫秒级延时* @param  nms: 延时的毫秒数* @retval 无*/
void delay_ms(uint16_t nms)
{uint32_t i;for(i = 0; i < nms; i++){delay_us(1000);  // 1ms = 1000us}
}

delay.h

#ifndef __DELAY_H
#define __DELAY_H#include "stm32f1xx_hal.h"void Delay_Init(void);
void delay_us(uint16_t nus);
void delay_ms(uint16_t nms);#endif /* __DELAY_H */

使用步骤:

1、在主函数文件添加包含

#include "dht11.h"
#include "delay.h"

2、初始化dht11和定时器延时,注意要先初始化    Delay_Init();

	Delay_Init();DHT11_Init();

3、通过函数读取问湿度值

uint8_t temp,humidity ;
DHT11_ReadData(&temp,&humidity);

代码结束

ai编程提示词

DHT11使用以下函数获取温度和湿度。
//temp温度数据范围0-50度
//humi湿度数据范围20-90%
//指向存储温度数据的uint8_t变量的指针temp,
//指向存储湿度数据的uint8_t变量的指针humi
//返回值0表示读取成功,1读取失败
uint8_t DHT11_ReadData(uint8_t * temp,uint8_t *humi)

相关文章:

STM32 HAL DHT11驱动程序

DHT11驱动程序会占用TIM3定时器&#xff0c;进行高精度延时。程序共包含4个文件 DHT11.c DHT11.h delay.c delay.h DHT11.c #include "stm32f1xx_hal.h" #include "dht11.h" #include "delay.h" // 添加延时头文件 #define DHT_PORT GPIOB…...

asm汇编源代码之文件操作相关

提供7个子程序:   1. 关闭文件 FCLOSE   2. 打开文件 FOPEN   3. 文件大小 FSIZE   4. 读文件 FREAD   5. 写文件 FWRITE   6. 建立文件 FCREATE   7. 读取或设置文件指针 FPOS 具体功能及参数描述如下 ; ---------------------------- FCLOSE PROC  FAR ; IN…...

Github 2025-04-12 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-04-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2uv: 极快的Python软件包安装程序和解析器 创建周期:147 天开发语言:Rust协议类型:Apache License 2.0Star数量:7…...

JAVA学习-练习试用Java实现“实现一个Java程序,对大数据集中的数据进行类型转换”

问题&#xff1a; 实现一个Java程序&#xff0c;对大数据集中的数据进行类型转换。 解答思路&#xff1a; 在Java中&#xff0c;对大数据集中的数据进行类型转换通常意味着将一种数据类型转换为另一种数据类型。以下是一个简单的Java程序示例&#xff0c;它演示了如何对大数据集…...

Android基础彻底解析-APK入口点,xml,组件,脱壳,逆向

第一章:引言与背景 Android逆向工程,作为一种深入分析Android应用程序的技术,主要目的就是通过分析应用的代码、资源和行为来理解其功能、结构和潜在的安全问题。它不仅仅是对应用进行破解或修改,更重要的是帮助开发者、研究人员和安全人员发现并解决安全隐患。 本文主要对…...

Spark RDD算子详解:从入门到精通

一、前言 在大数据处理领域&#xff0c;Apache Spark凭借其高效的内存计算能力&#xff0c;成为了流行的分布式计算框架。RDD&#xff08;Resilient Distributed Dataset&#xff09;是Spark的核心概念之一&#xff0c;它是一个分布式的数据集合&#xff0c;提供了丰富的操作接…...

Bootstrap4 卡片

Bootstrap4 卡片 Bootstrap 是一个流行的前端框架&#xff0c;它提供了丰富的组件和工具&#xff0c;使得开发者可以快速构建响应式、美观的网页。其中&#xff0c;Bootstrap4 中的卡片组件&#xff08;Card&#xff09;是一个非常实用的功能&#xff0c;可以用来展示图片、文…...

【随行付-注册安全分析报告-无验证方式导致隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…...

深入解析Antogen意图识别模型:从原理到实践

一、意图识别基础概念 1.1 什么是意图识别 意图识别(Intent Recognition)是自然语言处理(NLP)中的核心任务&#xff0c;旨在确定用户输入背后想要表达的目的或行动请求。它是对话系统理解用户的第一步&#xff0c;直接影响后续的对话管理和响应生成质量。 关键特征&#xff…...

企业年报问答RAG挑战赛冠军方案:从零到SotA,一战封神

RAG挑战赛是什么&#xff1f; 任务是基于企业年报构建问答系统。比赛日的流程简而言之&#xff1a; 解析阶段&#xff1a;获得100份随机企业的年报&#xff08;PDF格式&#xff0c;每份最多1000页&#xff09;&#xff0c;限时2.5小时完成解析并构建数据库。问答阶段&#xf…...

深入理解 HTML5 语义元素:提升网页结构与可访问性

引言 在构建网页的过程中&#xff0c;合理的结构与清晰的语义对于网页的质量、可维护性以及搜索引擎优化&#xff08;SEO&#xff09;都至关重要。HTML5 引入了一系列语义元素&#xff0c;为开发者提供了更精准描述网页内容的工具。本文将深入探讨 HTML5 语义元素的作用、使用…...

DeepSeek vs Grok vs ChatGPT:三大AI工具优缺点深度解析

一、DeepSeek&#xff1a;低成本与中文专精的本地化AI 优点 中文处理能力卓越 DeepSeek针对中文语法和文化背景进行了深度优化&#xff0c;尤其在古文翻译、诗歌创作和技术文档生成中表现突出&#xff0c;远超ChatGPT的中文支持能力。高效推理与低成本 采用混合专家&#xff…...

MCP(模型上下文协议)简单案例

MCP&#xff08;模型上下文协议&#xff09;的标准化接口 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是由Anthropic开发的一种开放协议&#xff0c;旨在标准化大型语言模型&#xff08;LLM&#xff09;与外部数据源和工具的交互方式1。它就…...

BGP基础概念与核心架构

一、BGP 协议定义与定位 BGP&#xff08;Border Gateway Protocol&#xff0c;边界网关协议&#xff09; 是互联网中唯一的域间路由协议&#xff08;EGP&#xff09;&#xff0c;用于在不同自治系统&#xff08;AS&#xff09;之间交换路由信息。与 OSPF、IS-IS 等域内路由协议…...

【经济保护主义叙事】

第一层&#xff1a;表面逻辑——经济保护主义叙事 公开理由&#xff1a;特朗普宣称加征关税是为了“保护美国制造业”“减少贸易逆差”“维护国家安全”&#xff0c;并强调通过关税迫使贸易伙伴降低壁垒&#xff0c;促进产业链回流美国。 底层逻辑&#xff1a;通过民族主义叙事…...

遵循IEC 62304:构建安全可靠的医疗器械软件

目录 一、IEC 62304 标准概述 1. 标准定位与适用范围 二、核心内容与要求 1. 软件安全等级&#xff08;Software Safety Classification&#xff09; &#xff08;1&#xff09;分级标准 &#xff08;2&#xff09;分级依据 &#xff08;3&#xff09;验证要求 2. 软件…...

ARM 架构下 spin_lock 实现

阅读该文章前&#xff0c;需要对原子指令有所了解&#xff0c;推荐阅读 聊一聊原子操作和弱内存序 1、概念 内核当发生访问资源冲突的时候&#xff0c;可以有两种锁的解决方案选择&#xff1a; 一个是原地等待一个是挂起当前进程&#xff0c;调度其他进程执行&#xff08;睡眠…...

计算机视觉算法实现——SAM实例分割:原理、实现与应用全景

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 实例分割领域概述 实例分割(Instance Segmentation)是计算机视觉领域最具挑战性的任务之一&#xff0c…...

asm汇编字符串操作

提供8个子程序: 1. 字符串长度 STRLEN 2. 字符串替换 REPLACE 3. 字节查找 SEARCHB 4. 双字节查找 SEARCHW 5. 输入字符串 GETSTR 6. 输出字符串 OUTSTR 7. 复制字符串 COPYSTR 8. 查找字符串 SRCHSTR 具体功能及参数描述如下 STRLEN PROC  FAR ; IN: ;   DS:DXSTRING ;…...

[MSPM0开发]之三MSPM0G3507之时钟系统

一、MSPM0G3507时钟模块概述 MSPM0G3507的时钟系统隶属于其电源管理和时钟单元 (PMCU) 。 PMCU主要负责电源管理、时钟配置和复位控制功能。 时钟模块包含内部和外部 振荡器 oscillators、 时钟监测器 clock monitors以及时钟选择和控制逻辑。 提供了频率时钟计数器frequency …...

如何绕过WAF实现SQL注入攻击?​

引言​​ 在渗透测试中&#xff0c;SQL注入&#xff08;SQLi&#xff09;始终是Web安全的核心漏洞之一。然而&#xff0c;随着企业广泛部署Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;传统的注入攻击往往会被拦截。本文将分享一种​​绕过WAF检测的SQL注入技巧​​…...

基础数学:图论与信息论

微积分与概率论由此进&#xff1a;基础数学&#xff1a;微积分和概率与统计-CSDN博客 线代与优化理论由此进&#xff1a;基础数学&#xff1a;线性代数与优化理论-CSDN博客 数值分析与离散数学由此进&#xff1a;基础数学&#xff1a;数值分析与离散数学-CSDN博客 四、图论与…...

05-RabbitMQ 面试题-mk

1.RabbitMQ-如何保证消息不丢失? 消息中间件的好处 提供了系统之间的异步调用,让服务与服务之间解耦削峰、填谷场景: 异步发送(验证码、短信、邮件…)MySQL和Redis , ES之间的数据同步分布式事务削峰填谷 消息发送者(publisher )把消息发送给交换机(exchange),由交…...

当当平台商品详情接口设计与调用指南

当当平台商品详情接口设计与调用指南 接口名称 GET /api/product/detail 图书商品核心信息查询接口 请求参数说明 参数名称 类型 是否必填 说明 isbn string 是 国际标准书号(支持13位/10位) product_id string 否 平台内部商品编号&#xff08;与…...

基于vue框架的住院信息管理系统k08hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;患者,工作人员,预约住院,住院登记,科室信息,床位信息,床位分配,转病房,病历信息,费用信息,出院登记 开题报告内容 基于Vue框架的住院信息管理系统开题报告 一、选题背景与意义 &#xff08;一&#xff09;选题背景 随着医疗技术的不…...

Flink 编程基础:Scala 版 DataStream API 入门

大家好&#xff01;我是心海 流处理技术在大数据时代正变得越来越重要&#xff0c;而 Apache Flink 作为领先的流处理引擎&#xff0c;凭借其高性能、低延迟和丰富的 API 受到了广泛关注。本文将以 Scala 语言为例&#xff0c;详细讲解 Flink DataStream API 的基本编程模型&am…...

noscript 标签是干什么的

vue public目录下的 index.html 会有 <noscript> 标签不知道是干吗的。 其实 noscript 标签在不支持或是禁用JavaScript 的浏览器中显示替代的内容。这个元素可以包含任何 HTML 元素。这个标签的用法也非常简单&#xff1a; <noscript><strong>Were sorry …...

基于 Streamlit 的 PDF 编辑器

你想实现一个基于 Streamlit 的 PDF 编辑器&#xff0c;功能包括&#xff1a; PDF 转 WordPDF 表格提取PDF 拆分页面PDF 转图片 下面是一个初步的 Streamlit 应用框架代码示例&#xff0c;集成了以上功能。使用了常见库如 pdfplumber、PyMuPDF&#xff08;fitz&#xff09;、…...

Oracle 排除交集数据 MINUS

MINUS 是 Oracle 数据库中的一种集合操作符&#xff0c;用于返回第一个查询结果中存在但第二个查询结果中 不存在 的 唯一行。其核心功能是 排除交集数据&#xff0c;常用于数据差异分析或过滤特定记录 一、核心功能 排除交集&#xff1a;返回第一个查询结果中 不在第二个查询结…...

.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)

.net Core 调用 deepseek api 使用流输出文本 简下面直接上代码&#xff08;.net core&#xff09;&#xff1a;最后再贴一个 .net Freamwork 4 可以用的代码TLS 的代码至关重要的&#xff1a;&#xff08;下面这个&#xff09; 简 在官网里面有许多的案例&#xff1a;我们通过…...

巧用递归算法:破解编程难题的“秘密武器”

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、递归 二、例题讲解 2.1. 汉诺塔问题 2.2. 合并两个有序链表 2.3. 反转链表 2.4. 两两交换链表中的节点 2.5. Pow(x, n) 三、总结 一、递归 递归的概念 一个方法在执行过程中调用自身, 就称为递…...

C++、Python的输入输出及相关的处理操作

一、C 输入输出及相关处理操作 C 是算法竞赛中常用的语言&#xff0c;因其高效性适合处理大数据或严格时间限制的题目。输入输出是基础&#xff0c;但细节处理&#xff08;如速度优化、格式要求&#xff09;对比赛结果影响很大。 1. 基本输入输出 C 使用 <iostream> 库…...

Unity协程从入门到精通:告别卡顿,用Coroutine优雅处理异步与时序任务 (Day 27)

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用

前言 重学Top10的第二篇&#xff0c;希望各位大佬不要见笑。 SSRF原理 SSRF又叫服务端请求伪造&#xff0c;是一种由服务端发起的恶意请求&#xff0c;SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理&#xff0c;执行攻击者构造…...

青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法

青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法 一、贪心算法的基本概念定义组成部分 二、贪心算法的工作原理三、贪心算法的优点四、贪心算法的缺点五、贪心算法的应用实例&#xff08;一&#xff09;找零问题&#xff08;二&#xff09;活动安排问题&#x…...

Linux系统Debian最新版12.10安装详细教程,虚拟机系统安装(附系统镜像资源)

前言 Debian是一款以稳定性著称的免费开源Linux发行版&#xff0c;支持多种硬件架构&#xff0c;遵循自由软件原则&#xff0c;并提供庞大的软件仓库和长期维护。 一、环境下载 Debian 12.10镜像下载 &#x1f4be;资源下载&#x1f449;Debian 12.10镜像下载&#xff1a;ht…...

android display 笔记(十一)surfaceflinger 如何将图层传到lcd驱动的呢?

SurfaceFlinger->>HWC: 提交所有图层&#xff08;Layer&#xff09; HWC->>DRM/KMS: 硬件合成&#xff08;Overlay&#xff09;或 GPU 合成 DRM/KMS->>LCD Driver: 配置显示控制器&#xff08;CRTC/Encoder&#xff09; LCD Driver->>Display: 通过 MI…...

管理大规模监控技术栈的最佳实践

集中管理可观测性数据 集中化监控数据有助于打破信息孤岛&#xff0c;提供系统全景视图。彭博社发现&#xff0c;当团队各自为战时&#xff0c;系统中断往往持续很久才有人意识到多个团队正在独立处理同一问题。通过数据集中管理&#xff0c;他们获得了更全面的基础设施视图&a…...

深入探索C++ STL:从基础到进阶

目录 引言 一、什么是STL 二、STL的版本 三、STL的六大组件 容器&#xff08;Container&#xff09; 算法&#xff08;Algorithm&#xff09; 迭代器&#xff08;Iterator&#xff09; 仿函数&#xff08;Functor&#xff09; 空间配置器&#xff08;Allocator&#xf…...

GitHub Desktop 推送报错 Authentication Failed 身份验证失败

弹窗问题&#xff1a; Authentication Failed 验证失败 We were unable to authenticate with https://gitee.com/.Pleaseenter your username and password to try again. 用户名 密码 Depending on your repository’s hosting service, you might need touse a Personal Acc…...

Webpack中的文件指纹:给资源戴上个“名牌”

Webpack中的文件指纹&#xff1a;给资源戴上个“名牌” 你是否想过&#xff0c;当你修改代码后&#xff0c;浏览器为什么仍然拿着旧版资源不放&#xff1f;秘密就在于——文件指纹&#xff01;简单来说&#xff0c;文件指纹就像给每个构建出来的文件贴上独一无二的“姓名牌”&…...

ESP32开发之ubuntu环境搭建

1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…...

重构艺术 | 如何优雅地“提炼函数“

在工作中总数遇到非常多的长代码&#xff0c;俗称“屎山”&#xff0c;这类代码读起来特别费劲。自己想重构一遍&#xff0c;但是总感觉缺乏经验指导&#xff0c;因此&#xff0c;多读书&#xff0c;读好书可能是最优解之一。读《重构改善即有代码的设计》有感&#xff0c;便写…...

[项目]基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明

基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明 一.项目概述二.硬件与软件资源 一.项目概述 功能结构图&#xff1a; 通过上位机发出模拟CAN数据给协议转换板&#xff0c;协议转换板将CAN协议数据转换为迪文屏数据&#xff0c;并通过迪文数据控制相关性质。 …...

如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程

&#x1f6e0;️ 如何查看自己 Android App 的私有数据&#xff1f;从 adb backup 到数据提取全过程 &#x1f4cc; 前言&#xff1a;作为一名 Android 开发者&#xff0c;我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的&#xff0c;比如有没有数据写入成功、有…...

Windows中xxx.dll动态链接库文件转xxx.a静态库文件

最近在学习探索C/C程序代码中调用Python代码时&#xff0c;出现了一个问题&#xff1a;下载的程序库文件&#xff0c;在使用MinGW编译C/C的代码时&#xff0c;一直提示无法链接&#xff0c;才发现是库类型不对应&#xff0c;无法导入链接。 上图所示的Python对应库&#xff0c;…...

用Java NIO模拟HTTPS

HTTPS流程 名词解释&#xff1a; R1:随机数1 R2:随机数2 R3:随机数3 publicKey:公钥 privateKey:私钥 step1 客户端 client hello R1 服务端 server hello R2 publicKey(验证证书&#xff0c;证书包含公钥) step2 客户端 R3 publicKey加密 服务端 privateKey解密 s…...

基于YOLOv8的火车轨道检测识别系统:技术实现与应用前景

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 引言&#xff1a;火车轨道检测领域概述 铁路运输作为国民经济的大动脉&#xff0c;其安全运行至关重要…...

解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理

解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu&#xff08;Noble 版本&#xff09;上安装 Docker 时&#xff0c;我遇到了两个常见的网络问题&#xff1a;apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置&#xff0c;最终成功运行 docker run he…...

DVDFab Virtual Drive电脑DVD备份和制作软件 v13.0.3.7 中文绿色便携

前言 DVDFab Virtual Drive是一个很厉害的光盘处理软件&#xff0c;它能帮你做几件事情&#xff1a;复制你的DVD或蓝光光盘作为备份&#xff0c;把这些光盘里的内容转换成其他格式&#xff0c;还能把视频文件刻录到DVD或蓝光光盘上。这个软件很灵活&#xff0c;能处理像DVD、蓝…...