STM32H7 QSPI的寄存器和功能介绍

目录

概述

1 认识QSPI

1.1 QSPI介绍

1.2 QUADSPI 主要特性

2 QUADSPI 功能说明

2.1 双闪存模式禁止

2.2 双闪存模式使能

3 QUADSPI 的用法

3.1 间接模式的操作步骤

3.1.1 QUADSPI 间接模式时配置帧模式

3.1.2 写控制寄存器 (QUADSPI_CR) 

3.1.3 写通信配置寄存器 (QUADSPI_CCR)

3.1.4 其他配置

3.2 状态标志轮询模式

3.3 内存映射模式

4 QUADSPI 寄存器

4.1 QUADSPI 控制寄存器 (QUADSPI_CR)

4.2 QUADSPI 状态寄存器 (QUADSPI_SR)

4.3 QUADSPI 标志清零寄存器 (QUADSPI_FCR)

4.4 QUADSPI 数据长度寄存器 (QUADSPI_DLR)

4.5 QUADSPI 通信配置寄存器 (QUADSPI_CCR)

4.6 QUADSPI 地址寄存器 (QUADSPI_AR)

 4.7 QUADSPI 交替字节寄存器 (QUADSPI_ABR)

4.8  QUADSPI 数据寄存器 (QUADSPI_DR)

4.9 QUADSPI 轮询状态屏蔽寄存器 (QUADSPI _PSMKR)

4.10 QUADSPI 轮询状态匹配寄存器 (QUADSPI _PSMAR)

4.11 QUADSPI 轮询间隔寄存器 (QUADSPI _PIR)

4.12 QUADSPI 低功耗超时寄存器 (QUADSPI_LPTR)


概述

本文主要介绍STM32H7的QSPI功能及其寄存器的配置参数,笔者仔细研读《STM32H7x3基于 ARM 内核的 32 位高级 MCU》,将该文档中QSPI的相关内容摘录出来汇编成本篇文章,方便项目设计中使用。

1 认识QSPI

1.1 QSPI介绍

QUADSPI 是一种专用的通信接口,连接单、双或四(条数据线) SPI FLASH 存储介质。该接口可以在以下三种模式下工作:

模式描述
间接模式使用 QUADSPI 寄存器执行全部操作
状态轮询模式周期性读取外部 FLASH 状态寄存器,而且标志位置 1 时会产生中断(如 擦除或烧写完成,会产生中断)
内存映射模式外部 FLASH 映射到微控制器地址空间,从而系统将其视作内部存储器
双闪存模式采用双闪存模式时,将同时访问两个 Quad-SPI FLASH,吞吐量和容量均可提高二倍。

1.2 QUADSPI 主要特性

1)三种功能模式:间接模式、状态轮询模式和内存映射模式

2)双闪存模式,通过并行访问两个 FLASH,可同时发送/接收 8 位数据

3)支持 SDR 和 DDR 模式

4)针对间接模式和内存映射模式,完全可编程操作码

5)针对间接模式和内存映射模式,完全可编程帧格式

6)集成 FIFO,用于发送和接收

7)允许 8、 16 和 32 位数据访问

8)在达到 FIFO 阈值和传输完成时生成 MDMA 触发信号

9)在达到 FIFO 阈值、超时、操作完成以及发生访问错误时产生中断

2 QUADSPI 功能说明

2.1 双闪存模式禁止

2.2 双闪存模式使能

3 QUADSPI 的用法

使用 FMODE[1:0] (QUADSPI_CCR[27:26]) 选择操作模式。

3.1 间接模式的操作步骤

FMODE编程为 00 可选择间接写入模式,将数据发送到 FLASH。 FMODE编程为 01 可选择间接读取模式,读取 FLASH 中的数据。

3.1.1 QUADSPI 间接模式时配置帧模式

1)在 QUADSPI_DLR 中指定待读取或写入的字节数

2)在 QUADSPI_CCR 中指定帧格式、模式和指令代码

3)在 QUADSPI_ABR 中指定要在地址阶段后立即发送的可选交替字节

4)在 QUADSPI_CR 中指定工作模式。

5)在 QUADSPI_AR 中指定目标地址。

6)通过 QUADSPI_DR 从 FIFO 读取数据/向 FIFO 写入数据

3.1.2 写控制寄存器 (QUADSPI_CR) 

1)使能位 (EN) 设置为“1

2)超时计数器使能位 (TCEN)

3)采样移位设置 (SSHIFT)

4)FIFO 阈值 (FTRHES),以指示 FTF 标志在何时置 1

5)中断使能

6)自动轮询模式参数:匹配模式和停止模式 (在 FMODE = 11 时有效)

7)时钟预分频器

3.1.3 写通信配置寄存器 (QUADSPI_CCR)

1)通过 INSTRUCTION 位指定指令字节

2)通过 IMODE 位指定指令发送方式( 1/2/4 线)

3)通过 ADMODE 位指定地址发送方式(无/1/2/4 线)

4)通过 ADSIZE 位指定地址长度( 8/16/24/32 位)

5)通过 ABMODE 位指定交替字节发送方式(无/1/2/4 线)

6)通过 ABSIZE 位指定交替字节数 (1/2/3/4)

7)通过 DBMODE 位指定是否存在空指令字节

8)通过 DCYC 位指定空指令字节数

9)通过 DMODE 位指定数据发送/接收方式(无/1/2/4 线)

3.1.4 其他配置

如果无需为某个命令更新地址寄存器 (QUADSPI_AR) 与数据寄存器 (QUADSPI_DR),则在写入 QUADSPI_CCR 时,该命令序列便立即启动。在 ADMODE 和 DMODE 均为 00 时,或在间接读取模式 (FMODE = 01) 下仅 ADMODE = 00 时,便属于此情况。

在需要地址(ADMODE 不为00) ,但无需写入数据寄存器(FMODE = 01 或 DMODE = 00)时,通过写入 QUADSPI_AR 新地址后,命令序列便立即启动。在数据传输( FMODE = 00 并且 DMODE ! = 00)中,通过QUADSPI_DR 写入 FIFO 触发通信启动

3.2 状态标志轮询模式

FMODE 字段 (QUADSPI_CCR[27:26]) 设置为 10,使能状态标志轮询模式

在此模式下,将发送编程的帧并周期性检索数据。每帧中读取的最大数据量为 4 字节。如果 QUADSPI_DLR 请求更多的数据,则忽略多余的部分并仅读取 4 个字节。

在 QUADSPI_PISR 寄存器中指定周期性。

在检索到状态数据后,可在内部进行处理,以达到以下目的:
1)将状态匹配标志位置 1,如果使能,还将产生中断
2)自动停止周期性检索状态字节

接收到的值可通过存储于 QUADSPI_PSMKR 中的值进行屏蔽,并与存储在 QUADSPI_PSMAR
中的值进行或运算或与运算。若是存在匹配,则状态匹配标志置 1, 并且在使能了中断的情况下还将产生中断;如果AMPS 位置 1,则 QUADSPI 自动停止。在任何情况下,最新的检索值都在 QUADSPI_DR 中可用。
 

3.3 内存映射模式

将 QUADSPI_CCR 寄存器中的 FMODE 设置为 11 可进入内存映射模式

在内存映射模式下,外部 FLASH 被视为内部存储器,只是存在访问延迟。在该模式下,仅允许对外部 FLASH 执行读取操作。当主器件访问存储器映射空间时,将发送已编程的指令和帧。FIFO 用作预取缓冲区以接受线性读取。

在此模式中,对于 QUADSPI_DR 的任何访问均返回零数据长度寄存器 (QUADSPI_DLR) 在内存映射模式中无意义。

4 QUADSPI 寄存器

4.1 QUADSPI 控制寄存器 (QUADSPI_CR)

偏移地址: 0x0000
复位值: 0x0000 0000

位 31:24 PRESCALER[7:0]:时钟预分频器 (Clock prescaler)
该字段定义基于 quadspi_ker_ck 时钟生成 CLK 所用的分频系数(值 + 1)。
     0: FCLK = Fquadspi_ker_ck, quadspi_ker_ck 时钟直接用作 QUADSPI CLK(预分频器被旁路)
     1: FCLK = Fquadspi_ker_ck/2
     2: FCLK = Fquadspi_ker_ck/3
   ...
     255: FCLK = Fquadspi_ker_ck/256
对于奇数时钟分频系数, CLK 的占空比并非 50%。时钟信号的低电平持续时间比高电平
持续时间多一个周期仅可在 BUSY = 0 时修改该字段。

位 23 PMM:轮询匹配模式 (Polling match mode)
该位指示在自动轮询模式期间用来确定是否“匹配”的方法。
0: AND 匹配模式。如果从 FLASH 接收的所有未屏蔽位均与匹配寄存器中的对应位相匹配,则 SMF 置 1。
1: OR 匹配模式。如果从 FLASH 接收的任意一个未屏蔽位与匹配寄存器中的对应位相匹配,则 SMF 置 1。

仅可在 BUSY = 0 时修改该位。

位 22 APMS:自动轮询模式停止 (Automatic poll mode stop)
该位确定在匹配后自动轮询是否停止。
0:仅通过中止或禁用 QUADSPI 停止自动轮询模式。
1:发生匹配时,自动轮询模式停止。

仅可在 BUSY = 0 时修改该位。

位 20 TOIE: TimeOut 中断使能 (TimeOut interrupt enable)
该位使能 TimeOut 中断。
0:禁止中断
1:使能中断

位 19 SMIE:状态匹配中断使能 (Status match interrupt enable)
该位使能状态匹配中断。
0:禁止中断
1:使能中断

位 18 FTIE: FIFO 阈值中断使能 (FIFO threshold interrupt enable)。
该位使能 FIFO 阈值中断。
0:禁止中断
1:使能中断

位 17 TCIE:传输完成中断使能 (Transfer complete interrupt enable)
该位使能传输完成中断。
0:禁止中断
1:使能中断

位 16 TEIE:传输错误中断使能 (Transfer error interrupt enable)
该位使能传输错误中断。
0:禁止中断
1:使能中断

位 12:8 FTHRES[4:0]: FIFO 阈值级别 (FIFO threshold level)
定义在间接模式下 FIFO 中将导致 FIFO 阈值标志(FTF, QUADSPI_SR[2])置 1 的字
节数阈值。
在间接写入模式下 (FMODE = 00):
0:如果 FIFO 中存在 1 个或更多空闲字节可供写入,则 FTF 置 1
1:如果 FIFO 中存在 2 个或更多空闲字节可供写入,则 FTF 置 1
...
31:如果 FIFO 中存在 32 个空闲字节可供写入,则 FTF 置 1
在间接读取模式下 (FMODE = 01):
0:如果 FIFO 中存在 1 个或更多有效字节可供读取,则 FTF 置 1
1:如果 FIFO 中存在 2 个或更多有效字节可供读取,则 FTF 置 1
...
31:如果 FIFO 中存在 32 个有效字节可供读取,则 FTF 置 1

位 7 FSEL: FLASH 选择 (FLASH memory selection)
该位选择单闪存模式 (DFM = 0) 下要寻址的 FLASH。
0:选择 FLASH 1
1:选择 FLASH 2
仅可在 BUSY = 0 时修改该位。
在 DFM = 1 时忽略该位

位 6 DFM:双闪存模式 (Dual-flash mode)
该位激活双闪存模式,同时使用两个外部 FLASH 以将吞吐量和容量扩大一倍。
0:禁止双闪存模式
1:使能双闪存模式。
仅可在 BUSY = 0 时修改该位。

位 4 SSHIFT:采样移位 (Sample shift)
默认情况下, QUADSPI 在 FLASH 驱动数据后过半个 CLK 周期开始采集数据。使用该
位,可考虑外部信号延迟,推迟数据采集。
0:不发生移位
1:移位半个周期
在 DDR 模式下 (DDRM = 1),固件必须确保 SSHIFT = 0。
仅可在 BUSY = 0 时修改该字段。

位 3 TCEN:超时计数器使能 (Timeout counter enable)
该位仅在内存映射模式 (FMODE = 11) 下有效。激活该位后,如果在一段时间(通过TIMEOUT[15:0] (QUADSPI_LPTR) 定义)内一直没有进行访问,将释放片选 (nCS)
(从而降低功耗)。
使能超时计数器。
默认情况下,即便在很长时间内不访问 FLASH, QUADSPI 也不会停止预取操作,之前的读取操作将保持激活状态并且 nCS 保持低电平。由于 nCS 保持低电平时, FLASH 功耗增加,应用程序可能会激活超时计数器( TCEN = 1, QUADSPI_CR 的位 3)。从而在FIFO 中写满预取的数据后,若在 TIMEOUT[15:0] (QUADSPI_LPTR) 个周期的时长内没有访问,则释放 nCS。
0:禁止超时计数器,在内存映射模式中进行访问后,片选 (nCS) 保持激活。
1:使能超时计数器,在内存映射模式下, FLASH 持续不活动 TIMEOUT[15:0] 个周期后
释放片选 (nCS)。
仅可在 BUSY = 0 时修改该位。

位 1 ABORT:中止请求 (Abort request)
该位中止执行中的命令序列。在中止完成时自动复位。
该位可停止当前的传输。
在轮询模式或内存映射模式下,该位也用以复位 APM 位或 DM 位。
0:不请求中止
1:请求中止

位 0 EN:使能 (Enable)
使能 QUADSPI。
0:禁止 QUADSPI
1:使能 QUADSPI
 

4.2 QUADSPI 状态寄存器 (QUADSPI_SR)

偏移地址: 0x0008
复位值: 0x0000 0000

位 13:8 FLEVEL[5:0]: FIFO 级别 (FIFO level)
该字段给出 FIFO 中的有效字节数。 FIFO 为空时 FLEVEL = 0,写满时 FLEVEL = 32。在内存映射模式和自动状态轮询模式下, FLEVEL 为零。

位 5 BUSY:忙 (Busy)
操作进行时,该位置 1。在对 FLASH 的操作完成并且 FIFO 为空时,该位自动清零。

位 4 TOF:超时标志 (Timeout flag)
发生超时时该位置 1。向 CTOF 写入 1 可将该位清零。

位 3 SMF:状态匹配标志 (Status match flag)
在自动轮询模式下,若未屏蔽的接收数据与匹配寄存器 (QUADSPI_PSMAR) 中的对应位相匹配,则该位置 1。向 CSMF 写入 1 可将该位清零。

位 2 FTF: FIFO 阈值标志 (FIFO threshold flag)
在间接模式下,若达到 FIFO 阈值,或从 FLASH 读取完成后, FIFO 中留有数据时,该位置 1。只要阈值条件不再为“真”,该位就自动清零。
在自动轮询模式下,每次读取状态寄存器时,该位即置 1 ;读取数据寄存器时,该位清零。

位 1 TCF:传输完成标志 (Transfer complete flag)
在间接模式下,当传输的数据数量达到编程设定值,或在任何模式下传输中止时,该位置 1。向 CTCF 写入 1 时,该位清零。

位 0 TEF:传输错误标志 (Transfer error flag)
在间接模式下访问无效地址时,该位置 1。向 CTEF 写入 1 可将该位清零。

4.3 QUADSPI 标志清零寄存器 (QUADSPI_FCR)

偏移地址: 0x000C
复位值: 0x0000 0000

位 4 CTOF:清除超时标志 (Clear timeout flag)
写入 1 可将 QUADSPI_SR 寄存器中的 TOF 标志清零

位 3 CSMF:清除状态匹配标志 (Clear status match flag)
写入 1 可将 QUADSPI_SR 寄存器中的 SMF 标志清零

位 2 保留,必须保持复位值。

位 1 CTCF:清除传输完成标志 (Clear transfer complete flag)
写入 1 可将 QUADSPI_SR 寄存器中的 TCF 标志清零

位 0 CTEF:清除传输错误标志 (Clear Transfer error flag)
写入 1 可将 QUADSPI_SR 寄存器中的 TEF 标志清零

4.4 QUADSPI 数据长度寄存器 (QUADSPI_DLR)

偏移地址: 0x0010
复位值: 0x0000 0000

4.5 QUADSPI 通信配置寄存器 (QUADSPI_CCR)

偏移地址: 0x0014
复位值: 0x0000 0000

位 31 DDRM:双倍数据速率模式 (Double data rate mode)
该位为地址、交替字节和数据阶段设置 DDR 模式:
0:禁止 DDR 模式
1:使能 DDR 模式
仅可在 BUSY = 0 时写入该字段。

位 30 DHHC: DDR 保持 (DDR hold)
在 DDR 模式下,延迟 1/4 个 QUADSPI 输出时钟周期再输出数据:
0:使用模拟延迟来延迟数据输出。
1:延迟 1/4 个 QUADSPI 输出时钟周期再输出数据。
该特性仅在 DDR 模式下激活。
仅可在 BUSY = 0 时写入该字段

位 29 FRCM: 自由运行时钟模式 (Free Running Clock Mode)
该位置 1 时,无论 FMODE 位如何, QUADSPI 外设均进入自由运行时钟模式。
0:正常模式
1:自由运行时钟模式
仅可在 BUSY = 0 时写入该位。

位 28 SIOO:仅发送指令一次模式 (Send instruction only once mode)
指令仅发送一次。 IMODE = 00 时,该位不起作用。
0:在每个事务中发送指令
1:仅为第一条命令发送指令
仅可在 BUSY = 0 时写入该字段。

位27:26 FMODE[1:0]:功能模式 (Functional mode)
该字段定义 QUADSPI 操作的功能模式:
00:间接写入模式
01:间接读取模式
10:自动轮询模式
11:内存映射模式
仅可在 BUSY = 0 时写入该字段。

位 25:24 DMODE[1:0]:数据模式 (Data mode)
该字段定义数据阶段的操作模式:
00:无数据
01:单线传输数据
10:双线传输数据
11:四线传输数据
该字段还定义空指令阶段的操作模式。
仅可在 BUSY = 0 时写入该字段

位22:18 DCYC[4:0]:空指令周期数 (Number of dummy cycles)
该字段定义空指令阶段的持续时间。在 SDR 和 DDR 模式下,它指定 CLK 周期数 (0-31)。
仅可在 BUSY = 0 时写入该字段

位 17:16 ABSIZE[1:0]:交替字节长度 (Alternate bytes size)
该位定义交替字节长度:
00: 8 位交替字节
01: 16 位交替字节
10: 24 位交替字节
11: 32 位交替字节
仅可在 BUSY = 0 时写入该字段。

位 15:14 ABMODE[1:0]:交替字节模式 (Alternate bytes mode)
该字段定义交替字节阶段的操作模式:
00:无交替字节
01:单线传输交替字节
10:双线传输交替字节
11:四线传输交替字节
仅可在 BUSY = 0 时写入该字段。

位 13:12 ADSIZE[1:0]:地址长度 (Address size)
该位定义地址长度:
00: 8 位地址
01: 16 位地址
10: 24 位地址
11: 32 位地址
仅可在 BUSY = 0 时写入该字段

位 11:10 ADDRESS[1:0]:地址模式 (Address mode)
该字段定义地址阶段的操作模式:
00:无地址
01:单线传输地址
10:双线传输地址
11:四线传输地址
仅可在 BUSY = 0 时写入该字段。

位 9:8 IMODE[1:0]:指令模式 (Instruction mode)
该字段定义指令阶段的操作模式:
00:无指令
01:单线传输指令
10:双线传输指令
11:四线传输指令
仅可在 BUSY = 0 时写入该字段。

位 7:0 INSTRUCTION[7:0]:指令 (Instruction)
指定要发送到外部 SPI 设备的指令。
仅可在 BUSY = 0 时写入该字段

4.6 QUADSPI 地址寄存器 (QUADSPI_AR)

偏移地址: 0x0018
复位值: 0x0000 0000

 4.7 QUADSPI 交替字节寄存器 (QUADSPI_ABR)

偏移地址: 0x001C
复位值: 0x0000 0000

4.8  QUADSPI 数据寄存器 (QUADSPI_DR)

偏移地址: 0x0020
复位值: 0x0000 0000

4.9 QUADSPI 轮询状态屏蔽寄存器 (QUADSPI _PSMKR)

偏移地址: 0x0024
复位值: 0x0000 0000

位 31:0 MASK[31:0]:状态屏蔽 (Status mask)
对在轮询模式下接收的状态字节进行屏蔽
对于位 n:
0:屏蔽在自动轮询模式下所接收数据的位 n,在匹配逻辑中不考虑其值
1:不屏蔽在自动轮询模式下所接收数据的位 n,在匹配逻辑中考虑其值
仅可在 BUSY = 0 时写入该字段。

4.10 QUADSPI 轮询状态匹配寄存器 (QUADSPI _PSMAR)

偏移地址: 0x0028
复位值: 0x0000 0000

位 31:0 MATCH[31:0]:状态匹配 (Status match)
该值将与屏蔽状态寄存器比较以进行匹配
仅可在 BUSY = 0 时写入该字段

4.11 QUADSPI 轮询间隔寄存器 (QUADSPI _PIR)

偏移地址: 0x002C
复位值: 0x0000 0000

 位 15:0 INTERVAL[15:0]:轮询间隔 (Polling interval)
自动轮询阶段读取操作之间的 CLK 周期数。
仅可在 BUSY = 0 时写入该字段。

4.12 QUADSPI 低功耗超时寄存器 (QUADSPI_LPTR)

偏移地址: 0x0030
复位值: 0x0000 0000

 位 15:0 TIMEOUT[15:0]:超时时长 (Timeout period)
在内存映射模式下,每次访问结束后, QUADSPI 将预取后续字节并将其存放在 FIFO中。该字段指示在 FIFO 写满后, QUADSPI 等待多少个 CLK 时钟周期才让 nCS 升至高电平将 FLASH 置为低功耗状态。
仅可在 BUSY = 0 时写入该字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/550749.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6-pytorch - 网络的保存和提取

前言 我们训练好的网络,怎么保存和提取呢? 总不可以一直不关闭电脑吧,训练到一半,想结束到明天再来训练,这就需要进行网络的保存和提取了。 本文以前面博客3-pytorch搭建一个简单的前馈全连接层网络(回归问…

树和二叉树(一)

一、树 非线性数据结构,在实际场景中,存在一对多,多对多的情况。 树( tree)是n (n>0)个节点的有限集。当n0时,称为空树。 在任意一个非空树中,有如下特点。 1.有且仅有一个特定的称为根的节点…

数字IPO:企业增长的新引擎

数字IPO作为一种新型融资方式,可以被视为企业增长的重要加速器。以下是数字IPO如何促进企业增长的几个关键方面: 1.低成本融资与知名度提升:相较于传统的借贷融资方式,数字IPO为企业提供了低成本的资金来源。同时,上市…

神经网络--反向传播算法推导

神经网络–反向传播算法推导 文章目录 神经网络--反向传播算法推导概述神经网络模型反向传导算法 概述 以监督学习为例,假设我们有训练样本集 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)),那么神经网络算法能提供一种复杂且非线性的假设模型 …

MySQL与Redis缓存一致性的实现与挑战

缓存是提高应用性能的重要手段之一,而 MySQL 和 Redis 是两种常用的数据存储和缓存技术。在许多应用中,常常将 Redis 用作缓存层,以加速对数据的访问。然而,在使用 MySQL 和 Redis 组合时,保持缓存与数据库之间的一致性…

【MATLAB源码-第54期】基于白鲸优化算法(WOA)和遗传算法(GA)的栅格地图路径规划最短路径和适应度曲线对比。

操作环境: MATLAB 2022a 1、算法描述 1.白鲸优化算法(WOA): 白鲸优化算法是一种受白鲸捕食行为启发的优化算法。该算法模拟了白鲸群体捕食的策略和行为,用以寻找问题的最优解。其基本思想主要包括以下几点&#xff…

FMEA赋能可穿戴设备:打造安全可靠的未来科技新宠!

在科技日新月异的今天,可穿戴设备已成为我们生活中不可或缺的一部分。它们以其便携性、智能化和个性化的特点,深受消费者喜爱。然而,随着可穿戴设备市场的快速扩张,其安全性和可靠性问题也日益凸显。为了确保产品质量,…

QT常量中有换行符解决方法--使用中文显示乱码或者编译报错

QT6.3常量中有换行符 int ret2QMessageBox::information(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit(("确认启动设备吗?")),QMessageBox::Yes,QMessageBox::No); 确保显示正常,建议每次使用时,中文的前后加一个空…

从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部

本文为从零开始写 Docker 系列第十一篇,实现类似 docker exec 的功能,使得我们能够进入到指定容器内部。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: 核心原理&…

在线音乐网站的设计与实现

在线音乐网站的设计与实现 摘 要 在社会和互联网的快速发展中,音乐在人们生活中也产生着很大的作用。音乐可以使我们紧张的神经得到放松,有助于开启我们的智慧,可以辅助治疗,达到药物无法达到的效果,所以利用现代科学…

优秀Burp插件 提取JS、HTML中URL插件

Burp Js Url Finder 攻防演练过程中,我们通常会用浏览器访问一些资产,但很多接口/敏感信息隐匿在html、JS文件中,通过该Burp插件我们可以: 1、发现通过某接口可以进行未授权/越权获取到所有的账号密码 2、发现通过某接口可以枚举用…

STM32的GPIO端口的八种模式解析

目录 STM32的GPIO端口的八种模式解析 一、上拉输入模式 二、下拉输入模式 三、浮空输入模式 四、模拟输入模式 五、推挽输出模式 六、开漏输出模式 七、复用推挽输出模式 八、复用开漏输出模式 STM32的GPIO端口的八种模式解析 在学习STM32的过程中,GPIO端口…

【YUV】YUV图像全面详解(一)——格式详解

文章目录 一、前言二、YUV 介绍三、YUV 优点四、YUV 采样格式五、YUV 存储格式六、具体分类详解 一、前言 视频采集芯片输出的码流一般都是 YUV 格式数据流,后续视频处理也是对 YUV 数据流进行编码和解析。所以,了解 YUV 数据流对做视频领域的人而言&am…

【web开发网页制作】html+css家乡长沙旅游网页制作(4页面附源码)

家乡长沙网页制作 涉及知识写在前面一、网页主题二、网页效果Page1、主页Page2、历史长沙Page3、著名人物Page4、留言区 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码HtmlCSS 五、源码获取5.1 获取方式 作者寄语 涉及知识 家乡长沙网页制作&#x…

学习Rust的第5天:控制流

Control flow, as the name suggests controls the flow of the program, based on a condition. 控制流,顾名思义,根据条件控制程序的流。 If expression If表达式 An if expression is used when you want to execute a block of code if a condition …

如何试用 Ollama 运行本地模型 Mac M2

首先下载 Ollama https://github.com/ollama/ollama/tree/main安装完成之后,启动 ollma 对应的模型,这里用的是 qwen:7b ollama run qwen:7b命令与模型直接交互 我的机器配置是M2 Pro/ 32G,运行 7b 模型毫无压力,而且推理时是用…

C语言案例——输出以下图案(两个对称的星型三角形)

目录 图片代码 图片 代码 #include<stdio.h> int main() {int i,j,k;//先输出上半部图案for(i0;i<3;i){for(j0;j<2-i;j)printf(" ");for(k0;k<2*i;k)printf("*");printf("\n");}//再输出下半部分图案for(i0;i<2;i){for(j0;j&…

《R语言与农业数据统计分析及建模》学习——R基础包的函数

1、R的基础包 基础包是R语言的核心组成部分&#xff0c;构建了R语言的基本功能框架。是R语言默认的安装包&#xff0c;不需要额外安装&#xff0c;使用时无需加载。 2、常用函数及其功能 &#xff08;1&#xff09;数据处理函数&#xff1a;unique()、sort()、subset() # 获…

LRTimelapse for Mac:专业延时摄影视频制作利器

LRTimelapse for Mac是一款专为Mac用户设计的延时摄影视频制作软件&#xff0c;它以其出色的性能和丰富的功能&#xff0c;成为摄影爱好者和专业摄影师的得力助手。 LRTimelapse for Mac v6.5.4中文激活版下载 这款软件提供了直观易用的界面&#xff0c;用户可以轻松上手&#…

OpenHarmony、HarmonyOS和Harmony NEXT 《我们不一样》

1. OpenHarmony 定义与地位&#xff1a;OpenHarmony是鸿蒙系统的底层内核系统&#xff0c;集成了Linux内核和LiteOS&#xff0c;为各种设备提供统一的操作系统解决方案。 开源与商用&#xff1a;OpenHarmony是一个开源项目&#xff0c;允许开发者自由访问和使用其源代码&#…