stm32 HAI库 SPI(一)原理
基本特点
- 通信方式:同步、串行(串行、并行、并发,别再傻傻分不清了!_串行和并行的区别-CSDN博客)、全双工 (也可以选择半双工)
- 速率:50MHZ以下
- 数据格式:8位/16位
- 传输顺序:MSB先行/LSB先行
通信
spi通信需要四个引脚,MOSI MISO SCK NSS。
- MOSI: master output slave input 主设备数据输出 从设备数据接收
- MISO:master input slave output
- SCK:时钟线 只有主设备能控制。不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为 fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备
- NSS(CS):片选不同的从设备 可选择硬件NSS和软件NSS
一对一:
一对多:
SCK
时钟线 空闲电平取决于工作模式的设置(见后)
NSS
原理:NSS保持高电平,如果想发起通信,主设备就去拉低对应从机的NSS信号线使能从机 开始与其通信(即MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效)
NSS可以选择是硬件模式还是软件模式,硬件模式就是一个固定的引脚作为NSS,直接与外界从设备的GPIO口相连,软件自选管脚
NSS模式的选择是由SPI_CR1寄存器中的ssm位和SPI_CR2寄存器中的SSOE位控制的。
区分一下NSS和CS
虽然大概上说这两者差不多(或者可以直接看做相同) 但还是有些微妙的差别。
NSS指的是芯片硬件上的那个真实存在的片选管脚,而CS虽然也起到片选从机的作用 但是它主要是强调主从之间实际连接的那个片选线,用软件手动控制。
具体的通信过程
- 主机首先拉低对应从机的NSS信号线,表示与该设备进行通信。
- 然后主机发送SCLK时钟信号,通知从机读/写数据。(SCLK时钟信号可能是低电平有效,也可能是高电平有效,见【spi四种工作模式】)
- 主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
- 从机(Slave)也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
Warning
SPI没有严格意义上的读写操作 只有发送和接收 而且无论是对主还是从设备 发送和接收都是一起进行的。
以主设备为例 主设备移位寄存器一位位把数据传到MOSI信号线上同时 MISO信号线上的数据也被一位位移进数据移位寄存器 然后再传给缓冲区这样
所以无论是主还是从设备 发送(接收)一个字节必须同时接收(发送)一个字节
如果是要主设备只输出 就得忽略掉从设备发送的字节。同理主设备只接收 从设备就得忽略掉主设备发送的字节(不过这个知道就好 hal库函数已经配备好了 如果不是自己写软件SPI的话其实不用考虑)
四种工作模式
SPI的工作模式由CPOL(时钟极性)和CPHA(相位)控制。
CPOL=0:低电平空闲高电平读取 =1:高电平空闲
CPHA=0:第一个沿采样 =1:第二个沿采样
模式 | CPOL | CPHA | 说明 |
---|---|---|---|
0 | 0 | 0 | 高电平的上升沿读取 |
1 | 0 | 1 | 高电平的下降沿读取 |
2 | 1 | 0 | 低电平的下降沿读取 |
3 | 1 | 1 | 低电平的上升沿读取 |
这四种工作模式的选择不是自己喜欢哪个选哪个 而是要根据从设备的数据帧规格设定。
STM32 SPI硬件架构
几个相关的寄存器:
- 控制寄存器:SPI_CR1 和SPI_CR2。控制整个SPI模块的工作状态
- SPI_CR1:
- CPHA:时钟相位,0:第一个边沿采样 1:第二个边沿
- CPOL:时钟极性(0: 空闲时为低电平;1: 空闲时为高电平)
- MSTR:主从选择(1:主机)
- BR[2:0]:波特率设置,控制 SCK 的分频
- SPE:使能SPI
- SSM:软件NSS管理。SSM=1,软件NSS。此时是否选中从机由下面的SSI位决定^^
- SSI:在SSM=1时有效。SSI=1,相当于软件拉高MSS,如果设置为0相当于拉低NSS(开始通信)
- LSBFIRST:是否小端传输
- SSI/SSM:软件控制 NSS(用于不连接外部 NSS)
- RXONLY:接收模式(1 = 仅接收 也就是半双工,只有MISO能使用)(0:全双工
- DFF:数据帧格式(0: 8bit,1: 16bit)
- CRCEN:CRC 校验使能
- BIDIMODE :=0:全双工;=1:单线模式,只能使用MOSI来进行双向传输
- BIDIOE:仅在BIDIMODE=1时有效。=1:单线处于主机发送模式;=0:单线处于从机接收模式
- SPI_CR2:
- TXEIE :开启后当TXE=1(发送缓冲区为空)时触发中断 让cpu发数据
- RXNEIE:开启后当RXNE=1(接收缓冲区费控)时触发中断 让cpu读数据
- ERRIE: 错误中断使能
- SSOE:硬件 NSS 输出使能(主机自动控制 NSS)
- TXDMAEN / RXDMAEN:发送/接收 DMA 使能
- SPI_CR1:
- 状态寄存器SPI_SR
- RXNE:接收缓冲区非空(表示可以读取)(rx no empty)
- TXE:发送缓冲区空(表示可以写入)
- BSY:忙标志位(1 = 正在通信)
- OVR:溢出错误(接收缓冲未读取就新数据来了
- MODF: 模式错误(如主从冲突)
- CRCERR:CRC错误
- 数据移位寄存器/串并转换器shift register:把数据一位位的移入/移出 实现数据串行和并行之间的转换
- tx buffer:发送缓冲区,由 CPU 或 DMA 写入数据。
- rx buffer:接收缓冲区,接收到的数据存放在这里,等待 CPU 或 DMA 读取。
- Baud Rate Generator(波特率发生器): 控制 SCK(串行时钟)的频率,由 CR1 寄存器中的 BR[2:0] 决定,通过分频选择 SPI 的时钟速度。
- Master Control Logic(主控逻辑),由 CR1 中的 MSTR、SPE 控制。MSTR:选择主/从设备(1 = 主机,0 = 从机)。SPE:SPI 使能。
再解释一下软件NSS
硬件NSS下内部是直接根据NSS引脚上的电平来进行状态判断的。
软件NSS下因为不知道你选的是哪个GPIO口 所以不能直接去读对应引脚的电平了 内部就只能通过SPICR1寄存器里的ssi位来模拟NSS线上的电平变化。这部分是要你自己写的。
硬件SPI和软件模拟SPI
硬件
硬件spi就是打开cubemx上的spi配置,自带CRC校验(可选)和DMA(可选)。
- 先使能spi
模式这里选择的是全双工 右边自动亮起三个固定引脚对应SCK MISO MOSI,NSS默认不显示(即使用软件NSS)
2.
如果打开硬件NSS(可以选择NSS是输入还是输出 主设备的话就是NSS输出 从设备的话就是NSS输入,无论输出还是输入NSS都是用那一个引脚)。
如果坚持使用软件NSS,就在右边随便选一个引脚设置为GPIO_OUTPUT.
3.参数设置(参数设置我瞎选的 不用跟着我来 要跟着从机)
- frame format帧格式。可以选择motoroia和TI两种。
- 选TI会变成这样
摩托罗拉比TI多一个时钟极性和相位的选择还有first bit。
一般默认使用摩托罗拉。(TI模式蛮麻烦的我没仔细看 但是应用上其实会简单点 因为少了挺多配置)
- 选TI会变成这样
- data size:SPI 每次数据传输可以 8 位或 16 位为单位,每次传输多少个单位无限制。
- first bit:选择字节序。MSB或者LSB都可以 跟着从设备选
MSB和LSB - prescaler:通过配置它使波特率适配从机
- baud rate :线上的波特率 是根据你的时钟配置 和 prescaler的选择 自动计算得到 跟着从机走
- CPOL:时钟极性 设置0或1
- CPHA:相位。
- CRC calculation:crc校验是否开启
- 开启它后会出现一个CRC Polynomial 默认即可
CRC校验 - nss signal typedef:自动跟着之前的配置
具体使用见:
硬件SPI的HAL库函数调用
软件模拟
就是自己在keil5里写代码 选4个引脚分别代表SCK MOSI MISO NSS,写对应的发送/接收/时钟拉高/拉低/数据读取等等操作。
软件比起硬件SPI大概只有一个自选引脚的优点 其他全是缺点(特别是时序上需要非常精确)so不建议用。
而且软件SPI没法用DMA,数据一多读起来很占用CPU。
SPI使用过程中的一些注意
-
主从设备的MOSI和MOSI是对应相连 而不是交叉相连(be like MOSI——MISO)
-
主机在SPI初始化后必须先拉低从机的NSS再发送(因为SPI一enable马上就会输出时钟脉冲……)否则很容易会丢数据,发送完成后需要等待BSY标志位为0才能把NSS拉高
-
硬件NSS的话hal库函数里是能实现第二条的 但是没有BSY==0后再升高NSS的逻辑 so如果是一些时序严格的设备就不要用硬件NSS了……自己写吧
-
软件NSS不仅自己拉高/拉低NSS要自己写 SPI_CR1寄存器中SSI位的1or0判断也要自己写
参考:
【STM32 HAL库SPI/QSPI协议学习,基于外部Flash读取】_stm32 hal qspi-CSDN博客
SPI中NSS/CS使用和SPI常见问题_spi cs-CSDN博客
【STM32】HAL库 STM32CubeMX教程十四---SPI-CSDN博客
STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs - Reference manual
相关文章:
stm32 HAI库 SPI(一)原理
基本特点 通信方式:同步、串行(串行、并行、并发,别再傻傻分不清了!_串行和并行的区别-CSDN博客)、全双工 (也可以选择半双工)速率:50MHZ以下数据格式:8位/16位传输顺序…...
仿腾讯会议——主界面设计创建房间加入房间客户端实现
1、实现腾讯会议主界面 2、添加Qt类WeChatDialog 3、定义创建会议和加入会议的函数 4、实现显示名字、头像的函数 调用函数 5、在中间者类中绑定函数 6、实现创建房间的槽函数 7、实现加入房间的槽函数 8、设置界面标题 9、服务器定义创建和进入房间函数 10、服务器实现创建房间…...
在pycharm profession 2020.3上安装使用xlwings
之前写了一篇文章在win7和python3.8上安装xlwings-CSDN博客 今天安装了pycharm profession 2020.3,自带Terminal,所以试一下安装xlwings。 一、新建一个python项目 二、安装xlwings 三、输入安装命令 pip3.exe install -i https://pypi.tuna.tsinghu…...
Mybatis学习笔记
介绍 MyBatis 是一款优秀的持久层开发框架,它在 Java 开发中被广泛应用,以下是对它的详细介绍: 概述 MyBatis 最初是 Apache 的一个开源项目 iBatis,2010 年这个项目由 Apache Software Foundation 迁移到了 Google Code&#…...
「Mac畅玩AIGC与多模态13」开发篇09 - 基于多插件协同开发智能体应用(天气+名言查询助手)
一、概述 本篇介绍如何在 macOS 环境下,同时接入多个自定义 OpenAPI 插件,实现智能体根据用户请求自动分析,调用天气查询或名言查询服务,完成多功能协同应用开发。 二、环境准备 1. 确认本地开发环境 macOS 系统Dify 平台已部署并可访问可正常访问外部 API 服务2. 准备天…...
C++--入门基础
C入门基础 1. C的第一个程序 C继承C语言许多大多数的语法,所以以C语言实现的hello world也可以运行,C中需要把文件定义为.cpp,vs编译器看是.cpp就会调用C编译器编译,linux下要用g编译,不再是gcc。 // test.cpp #inc…...
Ubuntu环境下如何管理系统中的用户:创建用户、删除用户、修改密码、切换用户、用户组管理
管理用户的操作需要root权限,在执行命令时需要加sudo,关于sudo命令可以看这篇:Linux_sudo命令的使用与机制 1、添加用户 使用命令: adduser 用户名,主要是按提示输入密码和用户信息(可直接回车使用默认配置…...
广告事件聚合系统设计
需求背景 广告事件需要进行统计,计费,分析等。所以我们需要由数据接入,数据处理,数据存储,数据查询等多个服务模块去支持我们的广告系统 规模上 10000 0000个点击(10000 00000 / 100k 1wQPS) …...
PDF智能解析与知识挖掘:基于pdfminer.six的全栈实现
前言 在数字化信息爆炸的时代,PDF(便携式文档格式)作为一种通用的电子文档标准,承载着海量的结构化与非结构化知识。然而,PDF格式的设计初衷是用于展示而非数据提取,这使得从PDF中挖掘有价值的信息成为数据…...
VGG网络模型
VGG网络模型 诞生背景 VGGNet是牛津大学计算机视觉组核谷歌DeepMind一起研究出来的深度卷积神经网络。VGG是一种被广泛使用的卷积神经网络结构,其在2014年的ImageNet大规模视觉识别挑战中获得亚军。 通常所说的VGG是指VGG-16(13层卷积层3层全连接层)。具有规律的…...
开闭原则与依赖倒置原则区别:原类不变,新增类(功能)vs 接口类不变,原实现类可变
好,我来用最通俗的方式,用角色扮演 场景对话,不讲术语,让你彻底明白「依赖倒置原则」和「开闭原则」的区别。 🎭 场景:你是老板(高层),你要雇人做事 一、【依赖倒置原则…...
【AI面试准备】Azure DevOps沙箱实验全流程详解
介绍动手实验:通过 Azure DevOps 沙箱环境实操,体验从代码提交到测试筛选的全流程。如何快速掌握,以及在实际工作中如何运用。 通过 Azure DevOps 沙箱环境进行动手实验,是快速掌握 DevOps 全流程(从代码提交到测试筛选…...
大数据面试问答-数据湖
1. 概念 数据湖(Data Lake): 以原始格式(如Parquet、JSON等)存储海量原始数据的存储库,支持结构化、半结构化和非结构化数据(如文本、图像)。采用Schema-on-Read模式,数…...
驱动开发系列56 - Linux Graphics QXL显卡驱动代码分析(三)显示模式设置
一:概述 如之前介绍,在qxl_pci_probe 中会调用 qxl_modeset_init 来初始化屏幕分辨率和刷新率,本文详细看下 qxl_modeset_init 的实现过程。即QXL设备的显示模式设置,是如何配置CRTC,Encoder,Connector 的以及创建和更新帧缓冲区的。 二:qxl_modeset_init 分析 in…...
沥青路面裂缝的目标检测与图像分类任务
文章题目是《A grid‐based classification and box‐based detection fusion model for asphalt pavement crack》 于2023年发表在《Computer‐Aided Civil and Infrastructure Engineering》 论文采用了一种基于网格分类和基于框的检测(GCBD)ÿ…...
单片机-STM32部分:0、学习资料汇总
飞书文档https://x509p6c8to.feishu.cn/wiki/Kv7VwjDD8idFWKkMj4acZA3lneZ 一、软件部分 STM32F1系列资料官网下载地址 https://www.stmcu.com.cn/Designresource/list/STM32F1/document/document STM32官方数据手册 有哪些版本,哪些资源,对应哪些IO…...
杭电oj(1180、1181)题解
目录 1180 题目 思路 问题概述 代码思路分析 1. 数据结构与全局变量 2. BFS 函数 bfs 3. 主函数 main 总结 代码 1181 题目 思路 1. 全局变量的定义 2. 深度优先搜索函数 dfs 3. 主函数 main 总结 代码 1180 题目 思路 注:当走的方向和楼梯方向一…...
内部类(3):匿名内部类
1 匿名类 请看下面这个例子: public class Parcel7 {public Contents contents() {return new Contents() {private int i 11;public int value() {return i;}};}public static void main(String[] args) {Parcel7 p new Parcel7();Contents c p.contents();} }…...
组件通信-$attrs
概述:$attrs用于实现当前组件的父组件,向当前组件的子组件通信(爷→孙)。 具体说明:$attrs是一个对象,包含所有父组件传入的标签属性。 注意:$attrs会自动排除props中声明的属性(可以认为声明过…...
Laravel Octane 项目加速与静态资源优化指南
Laravel Octane 项目加速与静态资源优化指南 一、Octane 核心加速配置 扩展安装与环境配置 composer require laravel/octane # 安装核心扩展php artisan octane:install # 生成配置文件(选择 Swoole/RoadRunner 等服务器)服务器参数调优 …...
【Linux】Petalinux U-Boot
描述 部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 0 引导流程示例 1 进入U-Boot 2 常用U-Boot操作命…...
【KWDB 创作者计划】技术解读:多模架构、高效时序数据处理与分布式实现
技术解读:多模架构、高效时序数据处理与分布式实现 一、多模架构1.1 架构概述1.2 源码分析1.3 实现流程 二、高效时序数据处理2.1 处理能力概述2.2 源码分析2.3 实现流程 三、分布式实现3.1 分布式特性概述3.2 源码分析3.3 实现流程 四、总结 在当今数据爆炸的时代&…...
深度学习框架PyTorch——从入门到精通(YouTube系列 - 4)——使用PyTorch构建模型
这部分是 PyTorch介绍——YouTube系列的内容,每一节都对应一个youtube视频。(可能跟之前的有一定的重复) torch.nn.Module(PyTorch神经网络模块)和torch.nn.Parameter(PyTorch神经网络参数)常见…...
通过组策略使能长路径
打开组策略编辑器,依次展开: 计算机配置 > 管理模板然后双击 所有设置 右侧就会出现列表。接着在列表中找到 启用 win32 长路径 ,双击 改成 已启用 ,然后点击确定。最后重启计算机。...
Dubbo(90)如何设计一个支持多协议的Dubbo服务?
设计一个支持多协议的Dubbo服务需要考虑以下几个方面: 服务接口设计:确保服务接口的定义可以被不同协议实现。多协议配置:配置不同的协议,例如 Dubbo、HTTP、gRPC 等。服务注册与发现:确保服务能够在多个协议下注册和…...
JavaScript常规解密技术解析指南
第一章:密码学基础铺垫 逆向思维提示框 逆向思维在密码学中至关重要。当面对加密数据时,不要局限于常规的加密过程,而是要从解密的角度去思考。例如,在看到Base64编码的数据时,要立刻联想到它是如何从原始数据转换而…...
字符串的相关方法
1. equals方法的作用 方法介绍 public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写 示例代码 public class StringDemo02 {public static void main(String[] args) {//构造方法的方式得到对象char[] chs {a, b, c};String s1 new String(chs);…...
云原生后端架构的实践与挑战:探索现代后端开发的未来
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 随着云计算的普及,云原生架构已经逐渐成为现代软件开发的主流方式。云原生后端架构通过容器化、微服务、自动化运维等技术,帮助企业构建具有高度可扩展性和可靠性的系统。在本文中,我们将深入探讨…...
MySQL基础关键_005_DQL(四)
目 录 一、分组函数 1.说明 2.max/min 3.sum/avg/count 二、分组查询 1.说明 2.实例 (1)查询岗位和平均薪资 (2)查询每个部门编号的不同岗位的最低薪资 3.having (1)说明 (2ÿ…...
Gradio全解20——Streaming:流式传输的多媒体应用(3)——实时语音识别技术
Gradio全解20——Streaming:流式传输的多媒体应用(3)——实时语音识别技术 本篇摘要20. Streaming:流式传输的多媒体应用20.3 实时语音识别技术20.3.1 环境准备和开发步骤1. 环境准备2. ASR应用开发步骤(基于Transform…...
[android]MT6835 Android 关闭selinux方法
Selinux SELinux is an optional feature of the Linux kernel that provides support to enforce access control security policies to enforce MAC. It is based on the LSM framework. Working with SELinux on Android – LineageOS Android 关闭selinux MT6835 Android…...
GitHub 趋势日报 (2025年05月01日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image⭐ 1311⭐ 56231Python2day…...
对称加密算法(AES、ChaCha20和SM4)Python实现——密码学基础(Python出现No module named “Crypto” 解决方案)
文章目录 一、对称加密算法基础1.1 对称加密算法的基本原理1.2 对称加密的主要工作模式 二、AES加密算法详解2.1 AES基本介绍2.2 AES加密过程2.3 Python中实现AES加密Python出现No module named “Crypto” 解决方案 2.4 AES的安全考量 三、ChaCha20加密算法3.1 ChaCha20基本介…...
n8n 键盘快捷键和控制键
n8n 键盘快捷键和控制键 工作流控制键画布操作移动画布画布缩放画布上的节点操作选中一个或多个节点时的快捷键 节点面板操作节点面板分类操作 节点内部操作 n8n 为部分操作提供了键盘快捷键。 工作流控制键 Ctrl Alt n:创建新工作流Ctrl o:打开工作…...
部署Superset BI(二)再战Superset
上次安装没有成功,这次把superset的安装说明好好看了一下。 rootNocobase:/usr# cd superset rootNocobase:/usr/superset# git clone https://github.com/apache/superset.git Cloning into superset... remote: Enumerating objects: 425644, done. remote: Count…...
生日快乐祝福网页制作教程
原文:https://www.w3cschool.cn/article/88229685.html (本文非我原创,请标记为付费文章,也请勿将我标记为原创) 一、引言 生日是每个人一年中最特别的日子之一。在这个特别的日子里,我们都希望能够给亲…...
Spring MVC @RequestHeader 注解怎么用?
我们来详细解释一下 Spring MVC 中的 RequestHeader 注解。 RequestHeader 注解的作用 RequestHeader 注解用于将 HTTP 请求中的**请求头(Request Headers)**的值绑定到 Controller 方法的参数上。 请求头是 HTTP 请求的一部分,包含了关于…...
【Linux深入浅出】之全连接队列及抓包介绍
【Linux深入浅出】之全连接队列及抓包介绍 理解listen系统调用函数的第二个参数简单实验实验目的实验设备实验代码实验现象 全连接队列简单理解什么是全连接队列全连接队列的大小 从Linux内核的角度理解虚拟文件、sock、网络三方的关系回顾虚拟文件部分的知识struct socket结构…...
Linux C++ JNI封装、打包成jar包供Java调用详细介绍
在前面 Android专栏 中详细介绍了如何在Android Studio中调用通过jni封装的c库。 在Android使用 opencv c代码,需要准备opencv4android,也就是c的任何代码,是使用Android NDK编译的,相当于在windows/mac上使用Android stdido交叉…...
CPO-BP+NSGA,豪冠猪优化BP神经网络+多目标遗传算法!(Matlab完整源码和数据)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CPO-BPNSGA,豪冠猪优化BP神经网络多目标遗传算法!(Matlab完整源码和数据),豪冠猪算法优化BP神经网络的权值和阈值,运行环境Matlab2020b及以上…...
组件通信-v-model
概述:实现 父↔子 之间相互通信。 前序知识 —— v-model的本质 <!-- 使用v-model指令 --> <input type"text" v-model"userName"><!-- v-model的本质是下面这行代码 --> <input type"text" :value"use…...
使用PyMongo连接MongoDB的基本操作
MongoDB是由C语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组。在这一节中,我们就来回顾Python 3下MongoDB的存储操作。 常用命令:…...
010302-oss_反向代理_负载均衡-web扩展2-基础入门-网络安全
文章目录 1 OSS1.1 什么是 OSS 存储?1.2 OSS 核心功能1.3 OSS 的优势1.4 典型使用场景1.5 如何接入 OSS?1.6 注意事项1.7 cloudreve实战演示1.7.1 配置cloudreve连接阿里云oss1.7.2 常见错误1.7.3 安全测试影响 2 反向代理2.1 正向代理和反向代理2.2 演示…...
PyQt 或 PySide6 进行 GUI 开发文档与教程
一、官网文档 Qt 官方文档:Porting to Qt 6 | Qt 6.9Qt 维基:Qt WikiQt for Python (PySide6) :Qt for Python - Qt WikiPySide6 快速上手指南:Getting Started - Qt for Python PyS…...
【东枫科技】AMD / Xilinx Alveo™ V80计算加速器卡
AMD / Xilinx Alveo™ V80计算加速器卡 AMD/Xilinx Alveo ™ V80计算加速器卡是一款功能强大的计算加速器,基于7nm Versal™ 自适应SoC架构而打造。 AMD/Xilinx Alveo V80卡设计用于内存密集型任务。 这些任务包括HPC、数据分析、网络安全、传感器处理、计算存储和…...
C++ 动态内存管理
operator new和operator delete函数是两个全局函数,编译器在编译new和delete时会调用这两个函数,其底层分别是封装malloc和free 1.new new 内置类型 内置类型没有构造函数,所以使用new就是调operator new函数开空间,如果要初始化…...
(11)Vue-Router路由的详细使用
本系列教程目录:Vue3Element Plus全套学习笔记-目录大纲 文章目录 第2章 路由 Vue-Router2.1 Vue路由快速入门2.1.1 创建项目2.1.2 路由运行流程 2.2 传递参数-useRoute2.2.1 路径参数-params1)普通传参2)传递多个参数3)对象方式传…...
RISCV的smstateen-ssstateen扩展
RISC-V 的 Smstateen / Ssstateen 扩展是为了解决安全性和资源隔离性问题而设计的,尤其是针对在多个上下文(如用户线程、多个虚拟机)之间 潜在的隐蔽信道(covert channel) 风险。 🌐 背景:隐蔽信道与上下文切换问题 当…...
C++ 与 Lua 联合编程
在软件开发的广阔天地里,不同编程语言各有所长。C 以其卓越的性能、强大的功能和对硬件的直接操控能力,在系统开发、游戏引擎、服务器等底层领域占据重要地位,但c编写的程序需要编译,这往往是一个耗时操作,特别对于大型…...
瑞萨 EZ-CUBE2 调试器
瑞萨 EZ-CUBE2 调试器 本文介绍了瑞萨 EZ-CUBE2 调试器的基本信息、调试方式、环境搭建、硬件连接、软件测试等。 包装展示 调试器展示 开关选项 详见:EZ-CUBE2 | Renesas 瑞萨电子 . 环境搭建 使用 Renesas 公司的 e2 studio 开发工具,下载 并安装该…...