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

初学stm32 --- CAN

目录

CAN介绍

CAN总线拓扑图

CAN总线特点

CAN应用场景

CAN物理层

CAN收发器芯片介绍

 CAN协议层

数据帧介绍

CAN位时序介绍 

数据同步过程

硬件同步

 再同步

CAN总线仲裁

STM32 CAN控制器介绍

CAN控制器模式

 CAN控制器模式

 CAN控制器框图

发送处理

接收处理

 接收过滤器

CAN控制器位时序

CAN相关寄存器介绍(F1 / F4 / F7)

CAN主控制寄存器(CAN_MCR)

CAN位时序寄存器(CAN_BTR)

CAN 标识符寄存器(CAN_(T/R)IxR)

数据长度和时间戳寄存器(CAN_(T/R)DTxR)

 CAN低位数据寄存器(CAN_(T/R)DLxR)

 CAN高位数据寄存器(CAN_(T/R)DHxR)

 CAN过滤器位宽寄存器(CAN_FS1R)

CAN 过滤器FIFO关联寄存器(CAN_FFA1R)

CAN 过滤器组x寄存器(CAN_FxR(1/2))

CAN相关HAL库驱动介绍

CAN外设相关重要结构体:

结构体成员与寄存器情况

CAN基本驱动步骤

过滤器组设置实例:


CAN介绍

        CAN(Controller Area Network),是ISO国际标准化的串行通信协议

        为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。

        低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000

        高速CAN(ISO11898)通信速率125Kbps~1Mbps,总线长度≤40米(经典CAN)

        CAN FD 通信速率可达5Mbps,并且兼容经典CAN,遵循ISO 11898-1 做数据收发

        更多CAN的历史知识,可以上CAN in Automation(CiA) 官网了解。

CAN总线拓扑图

         终端电阻,用于阻抗匹配,以减少回波反射

        CAN总线由两根线( CANL CANH )组成,允许挂载多个设备节点(低速CAN:20 高速CAN:30)。

CAN总线特点

  1)多主控制                  每个设备都可以主动发送数据

  2)系统的柔软性           没有类似地址的信息,添加设备不改变原来总线的状态

  3)通信速度                  速度快,距离远

  4)错误检测&错误通知&错误恢复功能

  5)故障封闭                  判断故障类型,并且进行隔离

  6)连接节点多              速度与数量找个平衡

CAN应用场景

        CAN总线协议已广泛应用在汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。

CAN物理层

        CAN使用差分信号进行数据传输,根据CAN_HCAN_L上的电位差来判断总线电平。

        总线电平分为显性电平(逻辑0)和隐性电平(逻辑1),二者必居其一。

        显性电平具有优先权发送方通过使总线电平发生变化,将消息发送给接收方

电平

高速CAN

低速CAN

显性电平(0

UCAN_H – UCAN_L=  2V

UCAN_H – UCAN_L = 3V

隐性电平(1

UCAN_H – UCAN_L = 0V

UCAN_H – UCAN_L = - 1.5V

CAN收发器芯片介绍

 CAN协议层

          CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。

数据帧介绍

        数据帧由7段组成。数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段。

CAN位时序介绍 

        CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。

        注意 : 节点监测到总线上信号的跳变在SS段范围内,表示节点与总线的时序是同步,此时采样点的电平即该位的电平。

        采样点是指读取总线电平,并将读到的电平作为位值的点。

        根据位时序,就可以计算CAN通信的波特率。

数据同步过程

        由于时钟频率误差、传输上的相位延迟引起偏差,所以需要数据同步

        CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步。

硬件同步

        节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测帧起始信号在不在位数据的SS段内,判断内部时序与总线是否同步。

        假如不在SS段内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会使用硬件同步方式调整, 把自己的SS段平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。

 再同步

        再同步利用普通数据位的边沿信号(帧起始信号是特殊的边沿信号)进行同步。

        再同步的方式分为两种情况:超前和滞后,即边沿信号与SS段的相对位置。

        再同步时,PSB1和PSB2中增加或者减少的时间被称为“再同步补偿宽度(SJW)”,其范围:1~4 Tq

          限定了SJW值后,再同步时,不能增加限定长度的SJW值。SJW值较大时,吸收误差能力更强,但是通讯速度会下降。

        

CAN总线仲裁

决定优先级

        CAN总线处于空闲状态,最先开始发送消息的单元获得发送权。

        多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收。

        

         竞争失败单元,会自动检测总线空闲,在第一时间再次尝试发送。

STM32 CAN控制器介绍

        STM32 CAN控制器(bxCAN),支持CAN 2.0ACAN 2.0B Active版本协议。

        CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。CAN 2.0B Passive只能处理标准数据帧且扩展帧的内容会忽略。

bxCAN主要特点:

   波特率最高可达1M bps

   支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)

   具有3级发送邮箱

   具有3级深度的2个接收FIFO

   可变的过滤器组(最多28个)(F1只有14个)

CAN控制器模式

        CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式。

 CAN控制器模式

CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。(初始化模式下进行配置

 CAN控制器框图

 1CAN内核

        包含各种控制/状态/配置寄存器,可以配置模式、波特率等

2)发送邮箱

        用来缓存待发送的报文,最多可以缓存3个报文

3)接收FIFO

        缓存接收到的有效报文

4)接收过滤器

        筛选有效报文

发送处理

接收处理

 接收过滤器

        当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。

        每个过滤器组都有两个32位寄存器CAN_FxR1CAN_FxR2。根据过滤器组的工作模式(位宽和选择模式)不同,寄存器的作用不尽相同。

        选择模式可设置屏蔽位模式标识符列表模式,寄存器内容的功能就有所区别。

        屏蔽位模式,可以选择出一组符合条件的报文。寄存器内容功能相当于是否符合条件。

        标识符列表模式,可以选择出几个特定ID的报文。寄存器内容功能就是标识符本身。

        REG中bit值代表的是匹配与否:1必须匹配 0不用关心

        屏蔽位寄存器中位值为1,表示与ID要必须匹配;位值为0,表示可不与ID匹配。

        在使能过滤器情况下,总线上广播的报文ID与过滤器的配置都不匹配,CAN控制器会丢弃该报文,不会进入到接收FIFO中。

        注意:标识符选择位IDE和帧类型RTR需要一致。不同过滤器组的工作模式可以设置为不同。

CAN控制器位时序

STM32CAN外设位时序分为三段:

        同步段 SYNC_SEG、        时间段1 BS1(PTS + PBS1、        时间段2 BS2

STM32F103,设TS1=8TS2=7BRP=3,波特率 = 36000 / [( 9 + 8 + 1 ) * 4] = 500Kbps

STM32F407,设TS1=6TS2=5BRP=5,波特率 = 42000 / [( 7 + 6 + 1 ) * 6] = 500Kbps

  注意:通信双方波特率需要一致才能通信成功。

CAN相关寄存器介绍(F1 / F4 / F7)

CAN主控制寄存器(CAN_MCR

 INRQ位,用于控制初始化请求。

CAN位时序寄存器(CAN_BTR

 STM32F103,设TS1=8TS2=7BRP=3,波特率 = 36000 / [( 9 + 8 + 1 ) * 4] = 500Kbps

CAN 标识符寄存器(CAN_(T/R)IxR

 x范围:1~3,3个发送邮箱                x范围:1~2,2个接收FIFO邮箱

         报文使用标准标识符,EXID[17:0]值无效

        TxRQ位置1,请求邮箱发送

        注意:报文使用扩展标识符时,STID[10:0]等效于EXID[28:18],与EXID[17:0]组成29位扩展标识符。

        

数据长度和时间戳寄存器(CAN_(T/R)DTxR

 x范围:1~3,3个发送邮箱                x范围:1~2,2个接收FIFO邮箱

        注意:DLC是多少,数据内容就有多少字节被发送,并不是每次都发送8个字节数据。

 CAN低位数据寄存器(CAN_(T/R)DLxR

 CAN高位数据寄存器(CAN_(T/R)DHxR

使用时间戳功能DLC必须为8字节

CAN过滤器模式寄存器(CAN_FM1R

 CAN过滤器位宽寄存器(CAN_FS1R

        注意:CAN外设只能使用的有的过滤器组,不能使用没有的过滤器组。 

CAN 过滤器FIFO关联寄存器(CAN_FFA1R

该寄存器决定了哪个FIFO寄存器有效(即RIxRRDTxRRDLxRRDHxR的‘x) 

CAN 过滤器组x寄存器(CAN_FxR(1/2)

CAN相关HAL库驱动介绍

CAN外设相关重要结构体:

CAN_InitTypeDefCAN_FilterTypeDefCAN_(T/R)xHeaderTypeDef

CAN_InitTypeDefuint32_t Prescaler			/* 预分频 */
uint32_t Mode				/* 工作模式 */
uint32_t SyncJumpWidth		/* 再次同步跳跃宽度 */
uint32_t TimeSeg1			/* 时间段1(BS1)长度 */
uint32_t TimeSeg2			/* 时间段2(BS2)长度 */
uint32_t TimeTriggeredMode	/* 时间触发通信模式 */
uint32_t AutoBusOff			/* 总线自动关闭 */
uint32_t AutoWakeUp			/* 自动唤醒 */
uint32_t AutoRetransmission 	/* 自动重传 */
uint32_t ReceiveFifoLocked		/* 接收FIFO锁定 */
uint32_t TransmitFifoPriority	/*  传输FIFO优先级 */
CAN_FilterTypeDefuint32_t FilterIdHigh			/* ID高字节 */
uint32_t FilterIdLow			/* ID低字节 */
uint32_t FilterMaskIdHigh	 	/* 掩码高字节 */
uint32_t FilterMaskIdLow		/* 掩码低字节 */
uint32_t FilterFIFOAssignment	/* 过滤器关联FIFO */
uint32_t FilterBank			/* 选择过滤器组 */
uint32_t FilterMode			/* 过滤器模式*/
uint32_t FilterScale			/* 过滤器位宽 */
uint32_t FilterActivation		/* 过滤器使能 */
Uint32_t SlaveStartFilterBank 	/* 从CAN选择启动过滤器组 单CAN没有意义*/

结构体成员与寄存器情况

 

CAN基本驱动步骤

1CAN参数初始化

        工作模式、波特率等        HAL_CAN_Init

2、使能CAN时钟和初始化相关引脚

        GPIO模式设为复用功能模式        HAL_CAN_MspInit

3、设置过滤器

        HAL_CAN_ConfigFilter 完成过滤器的初始化

4CAN数据接收和发送

        HAL_CAN_AddTxMessage 发送消息

        HAL_CAN_ GetRxMessage 接收数据

5、使能CAN相关中断/设置NVIC/编写中断服务函数

        __HAL_CAN_ENABLE_IT (可选)

过滤器组设置实例:

 

关于CAN中断 

        启用 CAN 接收 FIFO0 消息挂起中断

__HAL_CAN_ENABLE_IT(&g_can_handle_struct, CAN_IT_RX_FIFO0_MSG_PENDING);
  • __HAL_CAN_ENABLE_IT:这是 STM32 HAL 库提供的一个宏,用于启用 CAN 外设的中断。
  • CAN_IT_RX_FIFO0_MSG_PENDING:这个参数表示启用 CAN 接收 FIFO0 消息挂起中断
    • 当 CAN 接收 FIFO0 中有新的消息并且该消息已经准备好时,控制器会触发一个中断,允许外部应用程序处理接收到的消息。
    • FIFO(先进先出队列)用于存储接收到的 CAN 消息,FIFO0 是第一个 FIFO 队列,STM32 的 CAN 控制器通常有多个 FIFO 队列。

是的,您的理解是正确的。进入挂起中断后,您可以读取 can_rxheader_struct.StdId,因为当 CAN 控制器收到数据并通过过滤器后,会将其存放到 FIFO 队列中。中断会在 FIFO 中有新消息时触发,并通过 HAL 函数 HAL_CAN_GetRxMessage 将数据读取出来。

详细解释:

1. CAN 接收机制概述
  • CAN 总线是一个广播式协议,当总线上有设备发送消息时,所有连接的设备都能接收到这条消息。
  • 过滤器:CAN 控制器通常配置了过滤器来筛选感兴趣的消息,只有经过过滤器允许的消息才会被接收并存储到接收 FIFO 中。STM32 的 CAN 控制器可以通过配置多个过滤器来选择哪些消息应当接收。
  • FIFO 队列:接收到的有效消息会被存储到接收 FIFO(如 FIFO0)。消息排队存储,等待被中断服务程序处理。
2. 中断触发

当接收到一条消息,并且通过了过滤器的检查后,消息就会被存储到 FIFO 中。此时,如果启用了接收中断(例如通过 CAN_IT_RX_FIFO0_MSG_PENDING),并且 FIFO 中有新消息,CAN 中断会被触发

3. 读取接收的消息
  • 在进入中断处理函数 USB_LP_CAN1_RX0_IRQHandler 后,您可以通过 HAL_CAN_GetRxMessage 函数读取接收到的消息,并将消息的相关信息(如标识符)和数据存储到相应的结构体中。
  • 读取的消息头信息(如 StdIdIDERTRDLC 等)通常存储在 CAN_RxHeaderTypeDef 结构体中
4. 总结
  • 数据是被动接收的:当总线上有数据并且经过了过滤器的过滤,符合条件的消息会被存储到 FIFO 中。
  • 进入中断后,可以读取 can_rxheader_struct.StdId:一旦中断被触发,您可以通过 HAL_CAN_GetRxMessage 读取消息的标识符和数据,标识符信息存储在 can_rxheader_struct.StdId 中。
  • 过滤器的作用:过滤器用于筛选总线上接收到的消息,只有符合条件的消息才会存放到 FIFO 中,并触发中断。

相关文章:

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…...

linux手动安装mysql5.7

一、下载mysql5.7 1、可以去官方网站下载mysql-5.7.24-linux-glibc2.12-x86_64.tar压缩包: https://downloads.mysql.com/archives/community/ 2、在线下载,使用wget命令,直接从官网下载到linux服务器上 wget https://downloads.mysql.co…...

【Java】LinkedHashMap (LRU)淘汰缓存的使用

文章目录 **1. initialCapacity(初始容量)****2. loadFactor(加载因子)****3. accessOrder(访问顺序)****完整参数解释示例****示例验证** LinkedHashMap 在 Java 中可维护元素插入或访问顺序,并…...

JAVA实现五子棋小游戏(附源码)

文章目录 一、设计来源捡金币闯关小游戏讲解1.1 主界面1.2 黑棋胜利界面1.3 白棋胜利界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载更多优质源码分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/145161039 JA…...

基于Java的百度AOI数据解析与转换的实现方法

目录 前言 一、AOI数据结构简介 1、官网的实例接口 2、响应参数介绍 二、Java对AOI数据的解析 1、数据解析流程图 2、数据解析实现 3、AOI数据解析成果 三、总结 前言 在当今信息化社会,地理信息数据在城市规划、交通管理、商业选址等领域扮演着越来越重要的…...

细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

目录 一、窗口看门狗的工作原理 1、递减计数器 2、窗口值和比较器 3、看门狗的启动 4、提前唤醒中断 二、窗口看门狗的HAL驱动程序 1、窗口看门狗初始化 2.窗口看门狗刷新 3.EWI中断及其处理 三、不开启EWI的WWDG示例 1、示例功能 2、项目设置 (1&…...

【.net core】【sqlsugar】时间查询示例

1、时间包含查询示例 //model.TimeInterval为时间区间参数,参数格式为2024-01-01~2025-01-01 //query为当前查询的语句内容 //为当前查询语句增加创建时间模糊搜索查询条件 query query.Where(a > ((DateTime)a.F_CreatorTime).ToString("yyyy-MM-dd HH:m…...

基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建

一、引言 1.1 研究背景阐述 在当今数字化时代,医疗行业正经历着深刻的变革,数字化转型的需求日益迫切。电子病历(EMR)作为医疗信息化的核心,其管理的高效性和数据利用的深度对于提升医疗服务质量、优化临床决策以及推动医学研究具有至关重要的意义。传统的电子病历管理系…...

STM32 HAL库函数入门指南:从原理到实践

1 STM32 HAL库概述 STM32 HAL(Hardware Abstraction Layer)库是ST公司专门为STM32系列微控制器开发的一套硬件抽象层函数库。它的核心设计理念是在应用层与硬件层之间建立一个抽象层,这个抽象层屏蔽了底层硬件的具体实现细节,为开发者提供了一套统一的、…...

Harmony面试模版

1. 自我介绍 看表达能力、沟通能力 面试记录: 2. 进一步挖掘 2.1. 现状 目前是在职还是离职,如果离职,从上一家公司离职的原因 2.2. 项目经验 如果自我介绍工作项目经验讲的不够清楚,可以根据简历上的信息再进一步了解 面试记…...

数据结构知识点

【1】栈(stack) C 标准库提供了 std::stack 模板类,用于实现栈的功能。std::stack 是基于其他容器(如 std::vector、std::deque 或 std::list)实现的适配器类。 std::stack 可以使用不同的底层容器来实现&#xff0c…...

RPC 简介

RPC(Remote Procedure Call,远程过程调用)是一种通过网络请求执行远程服务器上的代码的技术,使得开发者可以调用远程系统中的函数,就像调用本地函数一样。它隐藏了底层网络通信的细节,简化了分布式系统的开…...

qBittorent访问webui时提示unauthorized解决方法

现象描述 QNAP使用Container Station运行容器,使用Docker封装qBittorrent时,访问IP:PORT的方式后无法访问到webui,而是提示unauthorized,如图: 原因分析 此时通常是由于设备IP与qBittorrent的ip地址不在同一个网段导致…...

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中,下载、部署NVM(node.js version management)环境,并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法(https://blog.csdn.net/zhebushibiaoshi…...

【大数据】机器学习 -----关于data.csv数据集分析案例

打开表 import pandas as pd df2 pd.read_csv("data.csv",encoding"gbk") df2.head()查看数据属性(列标题,表形状,类型,行标题,值) print("列标题:",df2.columns)Data…...

使用Newtonsoft.Json插件,打包至Windows平台显示不支持

在unity中使用Newtonsoft.Json插件,打包至Windows遇到的问题 string json JsonConvert.SerializeObject(msg); 打包windows平台,显示该平台不支持 出现问题的原因 JsonConvert.SerializeObject 使用了反射来动态遍历对象的属性和字段。这可能在某些平台…...

树莓派5--系统问题汇总

前言: 该文章是我在使用树莓派5时所遇到的问题以及解决方案,希望对遇到相同问题的能够有所帮助。我的树莓派系统版本为:Pi-OS-ROS_2024_09_29 注意:如果没有什么需求千万不要更新树莓派中任何软件或者系统,除非你真的…...

Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250116

逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/11nYhOf5TL9haZdXcYTxmHQ?pwdfwg8 提取码: fwg8 -------------------- Level2逐笔成交逐笔委托数据分享下载 利用Level2的逐笔交易和委托数据,这种以毫秒为单位的详细信息能揭露众多关键信息,如庄…...

小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2

文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下: form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…...

windows远程桌面连接限定ip

1,Windows防火墙->高级设置->远程桌面 - 用户模式(TCP-In)->作用域->远程IP地址 2,启用规则...

强化学习-蒙特卡洛方法

强化学习-数学理论 强化学习-基本概念强化学习-贝尔曼公式强化学习-贝尔曼最优公式强化学习-值迭代与策略迭代强化学习-蒙特卡洛方法 文章目录 强化学习-数学理论一、蒙特卡洛方法理论(Monte Carlo, MC)二、MC Basic2.1 算法拆解2.2 MC Basic算法 三、MC Exploring Starts3.1 …...

Java并发编程——线程池(基础,使用,拒绝策略,命名,提交方式,状态)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…...

浅谈云计算08 | 基本云架构

浅谈基本云架构 一、负载分布架构二、资源池架构三、动态可扩展架构四、弹性资源容量架构五、服务负载均衡架构六、云爆发架构七、弹性磁盘供给架构八、冗余存储架构 在当今数字化时代,云计算已成为企业发展的核心驱动力,而其背后的一系列关键架构则是支…...

element select 绑定一个对象{}

背景&#xff1a; select组件的使用&#xff0c;适用广泛的基础单选 v-model 的值为当前被选中的 el-option 的 value 属性值。但是我们这里想绑定一个对象&#xff0c;一个el-option对应的对象。 <el-select v-model"state.form.modelA" …...

MySQL SQL优化技巧与原理

前言 随着业务数据量的不断增加&#xff0c;MySQL查询语句的执行效率对程序的运行效率影响逐渐增大。因此&#xff0c;进行SQL优化变得至关重要。本文将结合SQL的执行语句顺序和各种SQL场景&#xff0c;介绍一些常见的MySQL SQL优化技巧及其背后的原理。 一、MySQL SQL执行语…...

SSL:WRONG_VERSION_NUMBER 或者 net::ERR_SSL_PROTOCAL_ERROR

记录一次SSL部署成功后&#xff0c;接口请求依然报SSL错误的问题。 首先排除SSL证据链不足&#xff0c;系统时间不正确&#xff0c;TLS配置不正确等问题。 浏览器直接访问可以打开网站&#xff0c;但是postman等接口访问就一直报SSL异常&#xff1a; 类似参考资料中的这种异…...

51单片机——DS18B20温度传感器

由于DS18B20数字温度传感器是单总线接口&#xff0c;所以需要使用51单片机的一个IO口模拟单总线时序与DS18B20通信&#xff0c;将检测的环境温度读取出来 1、DS18B20模块电路 传感器接口的单总线管脚接至单片机P3.7IO口上 2、DS18B20介绍 2.1 DS18B20外观实物图 管脚1为GN…...

单细胞组学大模型(8)--- scGenePT,scGPT和GenePT的结合,实验数据和文本数据的交融模型

–https://doi.org/10.1101/2024.10.23.619972 研究团队和单位 Theofanis Karaletsos–Head Of AI - Science at Chan Zuckerberg Initiative &#xff08;Chan Zuckerberg Initiative是扎克伯格和他妻子Chan成立的科研&教育机构&#xff09; 研究简介 研究背景&…...

详解如何自定义 Android Dex VMP 保护壳

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 Android Dex VMP&#xff08;Virtual Machine Protection&#xff0c;虚拟机保护&#xff09;壳是一种常见的应用保护技术&#xff0c;主要用于保护 And…...

PHP中的魔术函数

PHP 魔术函数是在某些情况下会自动调用的特殊函数&#xff0c;它们以双下划线 __ 开头&#xff0c;以下是对常见 PHP 魔术函数的详细介绍&#xff1a; ### 构造函数和析构函数 - **__construct()**&#xff1a; - 这是一个构造函数&#xff0c;在创建类的新对象时会自动调…...

excel 判断某个单元格的日期,如果超过3天,则在另一个单元格显示超过三天的公式

excel 判断某个单元格的日期&#xff0c;如果超过3天&#xff0c;则在另一个单元格显示超过三天的公式&#xff0c;公式如下&#xff1a; IF(DATEDIF(C627,TODAY(),"d")<4,"3天以内","超过三天") IF(D627"超过3天","文件赶紧…...

TCP 序列和确认号说明 | seq 和 ack 号计算方法

注&#xff1a;本文为 “TCP 序列” 相关文章合辑。 英文引文机翻未校。 TCP Sequence and Acknowledgement Numbers Explained TCP 序列和确认编号说明 TCP Sequence (seq) and Acknowledgement (ack) numbers help enable ordered reliable data transfer for TCP streams…...

【Linux】Mysql部署步骤

一、JDK安装配置 在home目录下执行命令&#xff1a;mkdir Jdk 1.将JDK 上传至该文件夹&#xff0c;有些终端工具可以直接上传文件&#xff0c;比如&#xff1a;MobaXterm 可以看到安装包已经上传上来了 2.直接安装 命令&#xff1a;rpm -ivh jdk-8u311-linux-x64.rpm 3.安装成…...

【算法】枚举

枚举 普通枚举1.铺地毯2.回文日期3.扫雷 二进制枚举1.子集2.费解的开关3.Even Parity 顾名思义&#xff0c;就是把所有情况全都罗列出来&#xff0c;然后找出符合题目要求的那一个。因此&#xff0c;枚举是一种纯暴力的算法。一般情况下&#xff0c;枚举策略都是会超时的。此时…...

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数&#xff01; 默认成员函数是程序猿不显示声明定义&#xff0c;编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的&#xff0c;关于类与对象不才在前面笔记中有详细的介绍&#xff1a;点我…...

力扣刷题汇总

动态规划 1 . 最大子序和 (Maximum Subarray Sum) Leetcode 53. 最大子数组和 经典dp 问题描述&#xff1a;给定一个整数数组&#xff0c;求其中和最大的连续子数组的和。 状态定义&#xff1a;dp[i] 表示以第 i 个元素结尾的最大子序和。 2 . 最长公共子序列 (Longest Commo…...

Ansible自动化运维:基础与实践

在当今的IT运维领域&#xff0c;Ansible作为一款强大的自动化运维工具&#xff0c;正发挥着日益重要的作用。本文将详细介绍Ansible的相关知识&#xff0c;包括其作用、特点、安装配置以及常用模块的使用方法&#xff0c;旨在帮助读者快速上手并熟练运用Ansible进行自动化运维工…...

微信小程序在使用页面栈保存页面信息时,如何避免数据丢失?

微信小程序在使用页面栈保存页面信息时避免数据丢失的方法&#xff1a; 一、使用全局变量存储关键数据&#xff1a; 定义一个全局变量&#xff0c;例如在 app.js 中&#xff0c;用于存储页面的重要信息。在页面的 onHide 或 onUnload 生命周期中&#xff0c;将需要保存的数据…...

我国无人机新增实名登记110.3 万架,累计完成飞行2666万小时

据央视新闻从中国民航局了解到&#xff0c;2024 年我国全年新增通航企业 145 家、通用机场 26 个&#xff0c;颁发无人驾驶航空器型号合格证 6 个、新增实名登记无人机 110.3 万架&#xff0c;无人机运营单位总数超过 2 万家&#xff0c;累计完成无人机飞行 2666 万小时&#x…...

vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建

1、使用vite构建项目 npm create vitelatest 填写项目名的时候不能大写 2、跑起来之后配置下 import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from path // https://vite.dev/config/ export default defineConfig({plugins: [vue…...

C语言:-三子棋游戏代码:分支-循环-数组-函数集合

思路分析&#xff1a; 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数&#xff0c;使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、…...

前端调试遇到的无限debugger的原理与绕过

背景 debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字,只要遇到它,JavaScript 的执行便会在此处中断,进入调试模式。有了 debugger 这个关键字,我们就可以非常方便地对 JavaScript 代码进行调试,比如使用 JavaScript Hook 时,我们可以加入 debugger 关键字…...

Java负载均衡

Java中的负载均衡原理是指通过合理分配网络请求或计算任务的方式&#xff0c;将工作负载分配到多个服务器、处理单元或服务实例上&#xff0c;从而提高系统的性能、可扩展性和可用性。负载均衡不仅可以分散请求压力&#xff0c;还能增强系统的容错能力&#xff0c;避免单点故障…...

spark,读取和写入同一张表问题

读取a表&#xff0c;写入a表 1.写入的是分区表&#xff0c;不报错 2.读取上来之后&#xff0c;创建为临时视图temp&#xff0c;然后先写入a表&#xff0c;再使用temp&#xff0c;就会报错 解决办法&#xff1a;可以先使用temp&#xff0c;再写入a表 3.写入的不是分区表&…...

用gpg和sha256验证ubuntu.iso

链接 https://ubuntu.com/tutorials/how-to-verify-ubuntuhttps://releases.ubuntu.com/jammy/ 本文是2的简明版 sha256sum介绍 sha256sum -c SHA256SUMS 2>&1这段脚本的作用是验证文件的 SHA-256 校验和。具体来说&#xff0c;命令的各个部分含义如下&#xff1a; …...

HIVE技术

本文章基于黑马免费资料编写。 hive介绍 简介 hive架构 hive需要启动的配置 执行元数据库初始化命令 使用hive必须启动的服务 ./schematool -initSchema -dbType mysql -verbos启动 Hive 创建一个 hive 的日志文件夹 mkdir /export/server/hive/logs启动元数据管理服务 n…...

我的世界-与门、或门、非门等基本门电路实现

一、红石比较器 (1) 红石比较器结构 红石比较器有前端单火把、后端双火把以及两个侧端 其中后端和侧端是输入信号,前端是输出信号 (2) 红石比较器的两种模式 比较模式 前端火把未点亮时处于比较模式 侧端>后端 → 0 当任一侧端强度大于后端强度时,输出…...

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了&#xff0c;整个GPU的架构基本就熟了。市面上有很多GPU厂家&#xff0c;他们产品的架构各不相同&#xff0c;但是核心往往差不多&#xff0c;整明白一了个基本上就可以触类旁通了。下面这张图信息量很大&#xff0c;可以结合博客GPU 英伟达GPU架构回…...

[Qt]窗口-QMainWindow类-QMenuBar、QToolBar、QStatusBar、QDockWidget控件

目录 1.QMainWindow类介绍 2.菜单栏-QMenuBar控件 创建菜单栏 添加菜单和菜单选项 triggered信号 设置快捷键 添加分割线 添加图标 使用案例 3.工具栏-QToolBar控件 使用介绍 设置停靠位置 设置浮动属性 设置移动属性 使用案例 4.状态栏-QStatusBar控件 状…...

Linux命令行工具-使用方法

参考资料 Linux网络命令&#xff1a;网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…...