【通信协议】单总线协议详解——以DHT11为例

2023-05-16

单总线概述

        1、单总线的介绍
       (1)、单总线也称为1—Wire bus,它是由美国DALLAS(达尔斯)公司推出的外围串行扩展总线。单总线系统中配置的各种器件,由DALLAS公司提供的专用芯片实现。
       (2)、每个芯片都有64位ROM,厂家对每一芯片都用激光烧写编码,其中存有16位十进制编码序列号,它是器件的地址编码,以确保它挂在总线上后可被唯一地确定。除了器件的地址编码外,芯片内还包含收发控制和电源存储电路。这些芯片的耗电量都很小(空闲时为几微瓦,工作时为几毫瓦),工作时从总线上馈送电能到大电容中就可以工作,故一般不需要另加电源。
      (3)、与其他的单片机系统的串行扩展(如IIC、SPI和MICROWIRE等)不同,它只有一条数据输入/输出线DQ,总线上的所有器件都要挂在DQ上,DQ信号线既传输时钟,又传输数据,而且数据传输是双向的,这种只使用一条信号线地串行扩展技术,称为单总线技术。
     (4)、单总线的数据传输速率一般为16.3Kbit/s,最大可达142 Kbit/s,通常情况下采用100Kbit/s以下的速率传输数据。
        2、单总线技术的优势
       (1)与其他的的串行扩展相比,单片机与外围扩展器件相连接所需要的I/O口线很少,这极大地简化了器件间的连接,进而提高了可靠性;

       (2)单总线接口器件体积更加小,占用的电路板空间小,这就极大程度地减少了电路板空间与成本。

        3、单总线通信的硬件结构

 

        单片机对每个单总线器件通过总线DQ进行寻址。因为单总线的端口为漏极开路构或三态门的端口,因此一般需要加上拉电阻Rp,上拉电阻的阻值通常5K~10KΩ。

单总线通信的工作原理

        顾名思义,单总线即只有一根数据线,系统中的数据交换、控制都由这根数据线完成。

        主机和从机之间的通信可通过3个步骤完成分别为初始化单总线器件、识别单总线 器件和与单总线器件交换数据。由于它们是主从结构只有主机呼叫从机时从机才能应答,因此主机访问单总线器件都必须严格遵循单总线命令序列即初始化、ROM 命令、功能命令。如果出现序列混乱1-wire器件将不响应主机(搜索ROM命令报警搜索命令除外)。

        表1所列为 ROM 命令的说明而功能命令则根据具体1-wire 器件所支持的功能来确定。

 

        2、单总线技术的通信协议

        所有的单总线器件都要遵循严格的通信协议以保证数据的完整性。1—Wire 协议定义了复位脉冲、 应答脉冲、写0、写1、读0和读1时序等几种信号类型。所有的单总线命令序列(初始化ROM 命令功能命令)都是由这些基本的信号类型组成的。

        在这些信号中除了应答脉冲是由从机发送以外,其它均由主机发出同步信号并且发送的所有命令和数据都是字节的低位在前。

        (1)、初始化时序

 

 

        初始化过程 = 主机发出的复位脉冲 + 从机发出的应答脉冲。

        主机通过拉低单总线480 ~ 960 us产生T X复位脉冲,然后由主机释放总线,进入RX接收模式。主机释放总线时,会产生低电平跳变为高电平的上升沿,单总线器件检测到上升沿之后,延时15 ~ 60 us,单总线器件拉低总线60 ~ 240 us来产生应答脉冲。主机接收到从机的应答脉冲说明单总线器件就绪,初始化过程完成,然后主机就可以开始对单总线器件进行 ROM 命令和功能命令操作。

       ( 2)、写“1”和写“0”时序

 

        写间隙有两种,包括写0的时间隙和写1的时间隙。

        主机要产生一个写1时间隙,就必须把数据线拉低,在写时间隙开始后的15 us内允许数据线拉高(即在0~15us内释放总线)。

        主机要产生一个写0时间隙,就必须把数据线拉低,在写时间隙开始后的60us内保持数据线拉低(即在0~60us内为低电平)。

        (3)、读时序

 

 

        单总线器件仅在主机发出读时序时才向主机传输数据所以当主机向单总线器件发出读数据命令1us后产生读时序以便单总线器件能传输数据。在主机发出读时序之后单总线器件才能在总线上发送“0”或“1”。

        若单总线器件发送“1”则总线保持高电平;

        若单总线器件发送“0”则总线保持低电平;

        由于单总线器件发送数据后可保持15μs有效时间,因此主机在读时序期间必须释放总线且须在 15μs 内采样总线状态以便接收从机发送的数据。

单总线器件的举例——DHT11

        1、DHT11的概述

        DHT11 是广州奥松有限公司生产的一款湿温度一体化的数字传感器。 该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位 单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集环境的湿度和温度。

        DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O口。传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采用 校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电 源电压下,工作平均最大电流 0.5mA。

        性能指标和特性如下

        ●工作电压范围:3.5V-5.5V 

        ●工作电流 :平均 0.5mA

        ●湿度测量范围:20-90%RH 

        ●温度测量范围:0-50℃ 

        ●湿度分辨率 :1%RH 8 位 

        ●温度分辨率 :1℃ 8 位

        ●采样周期 :1S

        ●单总线结构

        ●与TTL兼容(5V)管脚排列如下:

 

 

        DHT11 数字湿温度传感器连接方法极为简单。

        第一脚接电源正,第四脚接电源地端,数据端为第二脚,可直接接主机(单片机)的 I/O 口。为提高稳定性,建议在数据端和电源正之间接一只 4.7K 的上拉电阻。第三脚为空脚,此管脚悬空不用

2、DHT11的数据结构

        DHT11数字湿温度传感器采用单总线数据格式,即单个数据引脚端口完成输入输出双向传输。

        其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具 体格式在下面说明。 一次完整的数据传输为40bit,高位先出。

        数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bit温度整数数据+8bit温度小数数据 +8bit校验和

        校验和数据为前四个字节相加。 传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间 应该分开处理。如果,某次从传感器中读取如下5Byte数据:

 

 

        由以上数据就可得到湿度和温度的值,计算方法:

        (湿度)= byte4 . byte3=45.0 (%RH)

        (温度)= byte2 . byte1=28.0 ( ℃)

        (校验和)= byte4+ byte3+ byte2+ byte1=73

        如果校验和=湿度+温度,说明数据校验正确。

        注意:DHT11一次通讯时间最大3ms,主机连续采样间隔建议不小于100ms。

        3、DHT11的传输时序

        (1)DHT11 开始发送数据流程

 

        首先主机发送开始信号,即:拉低数据线,保持t1(至少18ms)时间,然后拉高数据线t2(20~40us)时间,然后读取DHT11的响应,正常的话,DHT11会拉低数据线,保持t3(40~50us)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50us)时间后,开始输出数据

(2)主机复位信号和 DHT11 响应信号

 

        首先由主机拉低数据线至少18ms,紧接着拉高数据线20~40us,即主机发送的复位信号。在主机发送复位信号后,DHT11开始拉低数据线40~50us作为响应信号,DHT11再发送向主机发送响应信号后,紧接着拉高数据线40~50us,意味着DHT11可以开始传送数据了。

(3)DHT11输出数字‘0’ 和输出数字‘1’

 

 

 

        1.主机先把data线拉高(io设置为输入)。

        2.从机把data线拉低,主机读取data线电平,直到低电平结束(大约50us)

     3.从机拉高data线后,延迟40us左右(28~70us之间)主机再次读取data线电平,如果为低电平,则为“0”,如果为高电平,则为“1”。

     4.继续重复上述1,2步骤累计40次。

        4、DHT11的程序

        DHT11.h中的程序

#ifndef DHT11_H
#define DHT11_H


#include "stm32f10x.h"
#include "iobit.h"

/*******************************************************************************
STM32的CRL控制着每个IO端口(A~G)的低8位的模式。
每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。
*******************************************************************************
//IO方向设置
//IO方向设置	CRH的作用和CRL完全一样,CRL控制的是低8位输出口,CRH控制的是高8位输出口
#define      DHT11_IO_IN()       {GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=8<<0;}	
//GPIOB->CRL&=0XFFFFFFF0:控制IO口    GPIOB->CRL|=8<<0:设置IO口为输入
#define		 DHT11_IO_OUT() 	 {GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=3<<0;}	
//GPIOB->CRL&=0XFFFFFFF0:控制IO口    GPIOB->CRL|=3<<0:设置IO口为输出

IO操作函数											   
#define	DHT11_DQ_OUT PBout(0) 	    //数据端口	PB0
#define	DHT11_DQ_IN  PBin(0)  		//数据端口	PB0


unsigned char DHT11_Init(void);						//初始化DHT11
unsigned char DHT11_Read_Data(u8 *humiH,u8 *humiL,u8 *tempH,u8 *tempL);  	
//读取温湿度
unsigned char DHT11_Read_Byte(void);				//读出一个字节
unsigned char DHT11_Read_Bit(void);					//读出一个位
unsigned char DHT11_Check(void);					//检测是否存在DHT11
void DHT11_Reset(void);								//复位DHT11   
void DHT11_Show_Data(void);


#endif

DHT11.c中的程序 

#include "dht11.h"
#include "delay.h"
#include "string.h"
#include "stdio.h"

/*******************************************************************************
* 函数名         : DHT11_Reset()
* 函数功能		 : 复位DHT11	
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void DHT11_Reset(void)	   
{                 
	
	DHT11_IO_OUT(); 								//SET OUTPUT
    DHT11_DQ_OUT=0; 								//拉低DQ
    delay_ms(20);    								//拉低至少18ms
    DHT11_DQ_OUT=1; 								//DQ=1 
	delay_us(30);     								//主机拉高20~40us
	
}

/*******************************************************************************
* 函数名         : DHT11_Check()
* 函数功能		 : 等待DHT11的回应	
* 输入           : 无
* 输出         	 : 返回1:未检测到DHT11的存在 返回0:检测到DHT11的存在
*******************************************************************************/
unsigned char DHT11_Check(void) 	   
{   
	
	unsigned char retry=0;
	DHT11_IO_IN();									//SET INPUT	 
    while (DHT11_DQ_IN&&retry<100)					//DHT11会拉低40~80us
	{
		retry++;
		delay_us(1);
	}	 
	if(retry>=100)
		return 1;
	else 
		retry=0;
    while (!DHT11_DQ_IN&&retry<100)					//DHT11拉低后会再次拉高40~80us
	{
		retry++;
		delay_us(1);
	}
	if(retry>=100)
		return 1;	    
	return 0;
	
}

/*******************************************************************************
* 函数名         : DHT11_Read_Bit()
* 函数功能		 : 从DHT11读取一个位	
* 输入           : 无
* 输出         	 : 返回值:1/0
*******************************************************************************/
unsigned char DHT11_Read_Bit(void) 			 
{
	
 	unsigned char retry=0;
	while(DHT11_DQ_IN&&retry<100)					//等待变为低电平
	{
		retry++;
		delay_us(1);
	}
	retry=0;
	while(!DHT11_DQ_IN&&retry<100)					//等待变高电平
	{
		retry++;
		delay_us(1);
	}
	delay_us(40);									//等待40us
	if(DHT11_DQ_IN)
		return 1;
	else 
		return 0;	
	
}


/*******************************************************************************
* 函数名         : DHT11_Read_Byte()
* 函数功能		 : 从DHT11读取一个字节	
* 输入           : 无
* 输出         	 : 返回值:读到的数据
*******************************************************************************/
unsigned char DHT11_Read_Byte(void)    
{        
    unsigned char i,data;
    data=0;
	for (i=0;i<8;i++) 
	{
   		data<<=1; 
	    data|=DHT11_Read_Bit();
	}						    
    return data;
}


/*******************************************************************************
* 函数名         : DHT11_Read_Data()
* 函数功能		 : 从DHT11读取一次数据
* 输入           : 无
* 输出         	 : 返回值:0,正常;1,读取失败			
tempL:温度值低位    tempH:温度值高位	humiL:湿度值低位	humiH:湿度值低位
*******************************************************************************/
unsigned char DHT11_Read_Data(u8 *humiH,u8 *humiL,u8 *tempH,u8 *tempL)    
{    
    
 	unsigned char buf[5];
	unsigned char i;
	DHT11_Reset();
	if(DHT11_Check()==0)						//是否检测到DHT11的存在
	{
		for(i=0;i<5;i++)							//读取40位数据
		{
			buf[i]=DHT11_Read_Byte();//将读取到的数据存储到buf[]这个数组里
		}
		if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
		{
			*humiH=buf[0];			
			*humiL=buf[1];			
			*tempH=buf[2];
			*tempL=buf[3];
		}
	}
	else 
		return 1;									//1,读取失败
	return 0;										//0,正常
    
}


/*******************************************************************************
* 函数名         : DHT11_Read_Data()
* 函数功能		 : 初始化DHT11的IO口 DQ 同时检测DHT11的存在
* 输入           : 无
* 输出         	 : 返回1:不存在	返回0:存在
*******************************************************************************/   	 
unsigned char DHT11_Init(void)
{	 
 	GPIO_InitTypeDef  GPIO_InitStructure;					 //定义GPIO结构体
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能PB端口时钟
	
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 //PB0端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //GPIO的速度
 	GPIO_Init(GPIOB, &GPIO_InitStructure);				 	 //初始化IO口
 	GPIO_SetBits(GPIOB,GPIO_Pin_0);						 	 //PB0 输出高
			    
	DHT11_Reset();  										 //复位DHT11
	return 
		DHT11_Check();										 //等待DHT11的回应
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【通信协议】单总线协议详解——以DHT11为例 的相关文章

  • highway_env中自定义环境

    前言 highway env中集成了很多强化学习或者控制算法测试的驾驶环境 xff0c 但很多时候我们需要依据需求对环境进行自定义 xff0c 这里给出了自定义环境的一些步骤 xff0c 主要是基于gym 61 61 0 26版本 创建步骤
  • 深度相机和激光雷达的融合标定(Autoware)

    深度相机和激光雷达是智能汽车上常用的传感器 但深度相机具有特征难以提取 xff0c 容易受到视角影响 激光雷达存在数据不够直观且容易被吸收 xff0c 从而丢失信息 因此在自动驾驶领域 xff0c 需要对于不同传感器做数据的融合和传感器的标
  • 基于OpenCv和ROS的图像灰度化处理

    直接调用opencv灰度化函数 xff0c 对于本地图像进行处理 实现C 43 43 代码如下 xff1a 图像灰度化 include lt iostream gt cv cvtColor头文件 include lt opencv2 img
  • IMU的轨迹解算和航迹显示

    基于ros操作系统 xff0c 调用IMU数据包 xff0c 利用数据解算小车运动的轨迹 xff0c 并在rviz中实现轨迹的可视化 其中IMU四元数对于位移速度和加速度的转换 轨迹解算和换机显示的代码 xff1a IMU航迹推算 incl
  • 对IMU数据进行卡尔曼滤波

    我们要使用IMU数据 xff0c 必须对数据进行预处理 xff0c 卡尔曼滤波就是很好的方式 1 卡尔曼滤波 卡尔曼滤波 xff08 Kalman filtering xff09 是一种利用线性系统状态方程 xff0c 通过系统输入输出观测
  • PHPExcel导出导入问题”continue” targeting switch is equivalent to “break”.Did you mean to use “continue 2”?

    在 php 7 3 的 switch 中使用 continue 会出现警告 1 2 3 最好的方式是把 PHPExcel Shared OLE php 文件中的 continue 改为 continue 2 或 break 亲测 xff0c
  • 强化学习highway_env代码解读

    写在前面 作为强化学习的新手 xff0c 写这个系列的博客主要是为了记录学习过程 xff0c 同时也与大家分享自己的所见所想 前段时间发布了人生第一篇博客 xff0c 是关于highway env的自定义环境 但博客主要是关于如何创建一个自
  • Highway_env(Intersection)修改离散动作空间

    前言 在十字路口环境中 xff0c 主车默认的动作空间是以5m s变化的加减速以及保持原速三个动作 有时候为了学习更优化的策略 xff0c 同时与自己设置的奖励函数吻合 xff0c 需要修改环境的动作空间 这里我们主要添加两个较小加速度的纵
  • 离散动作的修改(基于highway_env的Intersection环境)

    之前写的一篇博客将离散和连续的动作空间都修改了 xff0c 这里做一下更正 基于十字路口的环境 xff0c 为了添加舒适性评判指标 xff0c 需要增加动作空间 xff0c 主要添加两个不同加速度值的离散动作 需要修改以下几个地方 xff1
  • VM 导入.ova/.ovf,未通过 OVF 规范一致性或虚拟硬件合规性检查.

    今天在用虚拟机VM导入ubuntu riscv ova文件新建Ubuntu时报错 xff1a 未通过OVF规范一致性或虚拟硬件合规性检查 网上查了一下 xff0c 了解到这是因为VM内置的Ofvtool工具的版本较低导致的 xff0c 解决
  • 借助FileZilla实现Ubuntu和 Windows之间文件互传

    借助FileZilla实现Windows和 Ubuntu间文件互传 xff0c 需要使用 FTP服务 xff0c 设置方法如下 xff1a 1 Windows下安装FTP客户端 FileZilla xff08 该软件免费 xff0c 可以直
  • 使用Ubuntu系统中的gparted工具对Ubuntu磁盘扩充

    最近在使用Ubuntu时 xff0c 发现经常提示内存空间不足 就总结了扩充Ubuntu内存的主要流程 xff0c 操作步骤如下 xff1a 第一步 xff1a 在虚拟机操作界面 xff08 关闭要进行磁盘扩充的Ubuntu xff09 进
  • 通过挂载的方式,解决由于权限无法将rootfs直接拷贝到SD卡的EXT4分区的问题

    最近在使用SD卡制作Linux启动文件时 xff0c 要将自己制作的根文件系统 xff08 rootfs xff09 拷到SD卡的EXT4分区时 xff0c 发现由于权限问题无法直接拷贝 xff0c 现通过挂载的方式解决该问题 xff0c
  • RISC-V架构下,Busybox工具的安装

    今天在RISC V架构下安装Busybox工具箱时 xff0c 找了很多的资料 xff0c 但都是ARM架构下的安装教程 xff0c 尽管内核不同但有一定的参考价值 xff0c 安装完成后对RISC V下Busybox工具箱的安装过程做出了
  • 串行通信协议小结(Serial Protocols)(1)

    通信关键点 同步通信 xff08 例如SPI xff09 双方之间的数据传输使用公共时钟信号进行同步 xff0c 数据以稳定的流传输 不需要额外的比特来标记传输的每个数据块的开始 结束 xff0c 因此速度更快 异步通信 xff08 例如U
  • MATLAB课程笔记(二)——MATLAB基础知识

    MATLAB系统环境 MATLAB操作界面的组成 采用与office 2010相同风格的操作界面 gt gt 命令提示符表示MATLAB处于准备状态 xff1a 续行符 MATLAB的搜索路径 gt gt clear 清除工作区的全部变量
  • SVN的日常使用

    1 已经加入ignore的文件夹 xff0c 解除方法 xff1a 直接到被ignore的位置 xff0c 执行 xff1a svn add lt 你被ignore的文件名 gt no ignore no ignore是取消忽略 如果是ad
  • RM遥控器接收程序的分析

    由遥控器接收分析串口与DMA RM的遥控器在使用的过程中在大体上可以分成两个部分 xff1a 信息的接收 与 信息的解析 xff0c 在信息的接收中主要用到了串口的空闲中断和DMA双缓冲区接收在本篇的信息接收部分主要根据RM官方给出的代码来
  • robomaster麦轮运动解算

    1 资源与代码 1 1 参考文章 本文主要参考的三篇文章如下 xff1a 麦轮运动特性分析 xff1a https mp weixin qq com s biz 61 MzI3MTIyMjQwNQ 61 61 amp mid 61 2247
  • FreeRTOS内核——任务与任务切换

    2 任务 相关函数 1 xTaskCreateStatic 2 prvInitialiseNewTask 3 prvInitialiseTaskLists 4 vTaskStartScheduler 5 xPortStartSchedule

随机推荐

  • FreeRTOS应用——任务

    12 任务 12 1 相关函数 12 1 1 任务创建函数与启动调度 12 1 1 1 xTaskCreateStatic 静态创建任务 if configSUPPORT STATIC ALLOCATION 61 61 1 TaskHand
  • FreeRTOS应用——消息队列

    13 消息队列 消息队列是一种常用于任务键通信的数据结构 xff0c 队列可以在任务与任务间 中断与任务间传递信息 xff0c 实现了任务接收来自其他任务或者中断的不定长数据 任务能从队列中读取信息 xff0c 当队列中的消息为空时 xff
  • RoboMaster电机驱动

    1 硬件 1 1 电机 RM有很多不同型号的电机 xff0c 不同型号的电机有它不同的用途 xff0c 但是以用途分类的话主要是分成两种电机 xff1a 用来精准控制位置的电机 xff0c 在RM中的主要是云台电机 RM官网上的云台电机只有
  • 数据结构——校园导游系统

    校园导游系统 1 要求 大二下学期修了数据结构这门课 xff0c 课设的要求是做一个校园导航系统 详细的要求如下 问题描述 xff1a 当我们参观校园时 xff0c 会遇到如下问题 xff1a 从当前所处位置去校园另外一个位置 xff0c
  • 平衡小车实现

    平衡小车 1 前期准备 1 1 I2C通讯协议 在与MPU6050进行数据的读取时需要用到I2C通讯协议来进行通信 物理层 IIC一共有只有两个总线 xff1a 一条是双向的串行数据线SDA xff0c 一条是串行时钟线SCL SDA Se
  • 关于STM32CubeMX生成不了Keil代码的解决办法

    关于STM32CubeMX生成Keil代码时弹出but MDK ARM project generation have a problem的问题 有两种可能 xff1a 1 输出路径或文件名包含中文 2 Java环境版本不匹配 下载 xff
  • 2020电赛D题绕组飞行器

    在准备电赛的过程中 xff0c 做了一下去年的题 xff0c 本文将介绍我的方案及部分代码 xff0c 希望可以帮助到大家 一 我的装备 由于初学飞控所以主控用的是匿名的拓空者 xff0c 还有匿名的光流传感器 xff0c 北醒的激光雷达
  • nuxtjs常见问题

    1 在服务器端部署 xff0c 需要再服务器端安装node modules 2 本地忽略 nuxt文件夹 xff0c 这个需要在服务器端上执行npm run build生成 xff0c 然后执行 pm2 start npm name 34
  • Ubuntu学习笔记:sudo:vim:command not found

    Ubuntu学习笔记 xff1a sudo xff1a vim xff1a command not found 完成 xff01
  • Ubuntu学习笔记:查看所有用户

    Ubuntu学习笔记 xff1a 查看所有用户 输入 cat etc passwd cut f 1 d 注意 xff01 结尾有一个 xff1a 效果如下 xff1a
  • Ubuntu学习笔记:cd命令

    Ubuntu学习笔记 xff1a cd命令 命令顺序 xff1a 创建一个名为aaa的文件夹 进入指定文件夹 返回上一级文件夹 进入指定文件夹 返回上一级文件夹 退回上一次操作的文件夹 显示上一次操作的文件夹所在的路径 退回多级文件夹 退回
  • Ubuntu学习笔记:swapon 失败:设备或资源忙

    swapon 失败 xff1a 设备或资源忙 用命令swapoff xff0f 交换分区 将交换分区停止 然后再用swapon命令重新加载即可
  • Ubuntu学习笔记:使用命令查看当前登录系统的用户信息

    Ubuntu学习笔记 xff1a 使用命令查看当前登录系统的用户信息 1 查看当前登录的用户名 2 查看当前登录的用户名 终端类型 时间 IP地址 3 服务器连接的所有用户及正在使用的进程 4 显示系统中有哪些使用者正在上面 xff0c 显
  • Ubuntu学习笔记:使用命令查看系统资源,内存使用情况

    Ubuntu学习笔记 xff1a 使用命令查看系统资源 xff0c 内存使用情况 方法1 打开资源管理器 资源 gnome system monitor 方法2 top命令 方法3 下载htop apt get install htop h
  • Ubuntu学习笔记:使用命令修改 root 用户的密码

    Ubuntu学习笔记 xff1a 使用命令修改 root 用户的密码 Ubuntu 每次开机都有一个随机的新的 root 密码 在不知道密码的情况下 xff0c 要重新修改root密码 方法 xff1a sudo passwd 输入用户登录
  • C语言的特点

    1 语言简洁 紧凑 xff0c 使用方便 灵活 xff1b 2 运算符丰富 xff1b 3 数据类型丰富 xff1b 4 具有结构化的控制语句 xff08 例如if else语句 while语句 do while语句 switch语句和fo
  • Win11 更新绕过TPM2.0 方法 最新最简单 亲测有效 Win11系统更新 DEV方式

    最新的win11内测把不符合硬件规定的人都排除出去了 xff0c 虽然有注册表导入可以挤到DEV通道 xff0c 不过在更新到8 会弹出显示设备不支持提示 xff0c 关闭窗口后升级被取消 因此特在实践后教大家如何绕过TPM2 0 更新的方
  • iview常见问题

    1 radio组 label如果为字符串可以默认选中 xff0c 如果为数字 xff0c 却没有反应 答 xff1a label为数字时 xff0c 需要在label前加 xff1a 来绑定 xff0c 这样就可以实现默认选中了
  • 【通信协议】IIC通信协议详解

    IIC的基本介绍 IIC总线的发展 xff1a 芯片间总线 xff08 Inter Interface Circuit xff0c IIC xff09 xff0c 是应用广泛的芯片间串行扩展总线 目前世界上采用的IIC总线一共有两个规范 x
  • 【通信协议】单总线协议详解——以DHT11为例

    单总线概述 1 单总线的介绍 xff08 1 xff09 单总线也称为1 Wire bus xff0c 它是由美国DALLAS xff08 达尔斯 xff09 公司推出的外围串行扩展总线 单总线系统中配置的各种器件 xff0c 由DALLA